gpt4 book ai didi

vb.net - Visual Basic .NET : how to create a task from a method with parameters

转载 作者:行者123 更新时间:2023-12-02 08:20:08 26 4
gpt4 key购买 nike

我有一个带参数的子方法:

Public Sub mysub(ByVal x As Object)
[...]
End Sub

要将其作为线程启动,我只需执行以下操作:
Dim x1 as String = "hello"
mythread = New Thread(AddressOf mysub)
mythread.Start(x1)

我会改造 mysubasync功能。在线教程(例如 this one)仅适用于没有参数的方法。

我试过:
Dim mytask As Task
Dim x1 as String = "hello"
mytask = New Task(Me.mysub, x1)
mytast.Start()

但我收到错误:

Error BC30455 Argument not specified for parameter 'x' of 'Public Sub mysub(x As Object)'

最佳答案

使用子 method 将导致代码继续并行运行,包括主代码和子代码。请注意,这可能会导致竞争条件 ( see here ),而且您将无法“完全”利用 async/await 方便的编程。这与您一开始建议的多线程应用程序完全相同。

在VB中你需要做一个lambda用于调用您的代码的自定义子程序,然后您可以传递任何参数:

    Dim t As Task
t = New Task(Sub() mysub(param))

Public Sub mysub(ByVal param As ParamObject)
[...]
End Sub

但是,为了答案的完整性,让我们考虑另外使用 function 以及。所有函数都返回一些信息并使用 await关键字它将强制代码执行暂停,直到结果准备好。

在 VB 中,您需要定义一个包含返回类型的 lambda 自定义函数。然后你可以调用你的函数,包括任何需要的参数。
    Dim t As Task(Of RetObject)
t = Task.Run(Function() As RetObject
Return myfunction(param)
End Function)
Return Await t

Public Function myfunction(ByVal param As ParamObject) As RetObject
[...]
End Function

你在这里做的是一个 async同步代码的包装函数。出于多种原因,不鼓励这样做 ( see here )。总是建议从头开始编写代码,这需要 async-await来自地下室的行为。

关于vb.net - Visual Basic .NET : how to create a task from a method with parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37964024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com