VB.NET 多线程
VB.NET multithreading
我需要对参数列表执行任务:所有这些任务都是独立的。
我不知道该怎么做。我尝试将参数分成一个 "shared class" 并为列表中的每个项目创建一个 class 的不同实例,然后在每个项目上启动该功能异步实例:
Imports System.Runtime.InteropServices
Imports System.IO
Public Class DataContainer
Public Parameters as double 'obviously simplified code ;-)
End Class
Public Class JobDoer
Public CommonData As DataContainer
Public PrivData as double
Public Async Function YesWeCan() As Task(Of Boolean)
Return Task.Factory.StartNew(Of Boolean)(
DoIt(CommonData.Parameters , PrivData)
)
End Function
Public Function DoIt(a as double,b as double)
return 0
end function
End Class
==> 任务未定义...
.NET 框架 3.0
对比 2015
有什么想法吗?
Async
和 Await
关键字在 .NET 3.0 中不可用。它们已在 .NET 4.5 中引入,尽管您已经可以在 4.0 中使用它们(进行一些修改,例如必须对某些静态函数使用 TaskEx
而不是 Task
)如果您导入通过 NuGet 的 Microsoft.Bcl.Async 包。
您当然可以直接开始新线程而不必使用 Async/Await。
或者您可以使用 ThreadPool
。这是我过去制作的一些代码,最初是用 C# 编写的。我现在转换它并删除了至少需要 .NET 4.0 的部分。不过没测试过。
Private Sub SubmitWorkToThreadPool()
For i as Integer = 0 To yourWorkItems.Count 'Adjust this loop so it adds all your tasks to the thread pool.
'customParameter is passed as parameter 'state' to the DoParallelWork function.
ThreadPool.QueueUserWorkItem(AddressOf DoParallelWork, customParameter)
Next
End Sub
Private Sub DoParallelWork(state As Object)
'TODO: Add code to be executed on the threadpool
End Sub
在 4.0 版本中,我编写的方式允许我在使用 CountdownEvent
将其提交到线程池后等待所有工作项完成。但是 class 只存在于 4.0 之后,所以我删除了它。如果您需要等待一切完成,您可能需要寻找其他方法。
我需要对参数列表执行任务:所有这些任务都是独立的。 我不知道该怎么做。我尝试将参数分成一个 "shared class" 并为列表中的每个项目创建一个 class 的不同实例,然后在每个项目上启动该功能异步实例:
Imports System.Runtime.InteropServices
Imports System.IO
Public Class DataContainer
Public Parameters as double 'obviously simplified code ;-)
End Class
Public Class JobDoer
Public CommonData As DataContainer
Public PrivData as double
Public Async Function YesWeCan() As Task(Of Boolean)
Return Task.Factory.StartNew(Of Boolean)(
DoIt(CommonData.Parameters , PrivData)
)
End Function
Public Function DoIt(a as double,b as double)
return 0
end function
End Class
==> 任务未定义...
.NET 框架 3.0 对比 2015
有什么想法吗?
Async
和 Await
关键字在 .NET 3.0 中不可用。它们已在 .NET 4.5 中引入,尽管您已经可以在 4.0 中使用它们(进行一些修改,例如必须对某些静态函数使用 TaskEx
而不是 Task
)如果您导入通过 NuGet 的 Microsoft.Bcl.Async 包。
您当然可以直接开始新线程而不必使用 Async/Await。
或者您可以使用 ThreadPool
。这是我过去制作的一些代码,最初是用 C# 编写的。我现在转换它并删除了至少需要 .NET 4.0 的部分。不过没测试过。
Private Sub SubmitWorkToThreadPool()
For i as Integer = 0 To yourWorkItems.Count 'Adjust this loop so it adds all your tasks to the thread pool.
'customParameter is passed as parameter 'state' to the DoParallelWork function.
ThreadPool.QueueUserWorkItem(AddressOf DoParallelWork, customParameter)
Next
End Sub
Private Sub DoParallelWork(state As Object)
'TODO: Add code to be executed on the threadpool
End Sub
在 4.0 版本中,我编写的方式允许我在使用 CountdownEvent
将其提交到线程池后等待所有工作项完成。但是 class 只存在于 4.0 之后,所以我删除了它。如果您需要等待一切完成,您可能需要寻找其他方法。