Vb.net Task.Factory.StartNew的正确语法是什么?
我试图在VB.NET中启动一个新线程,但遇到语法问题 在C#中,我们可以使用以下方法完成相同的任务:Vb.net Task.Factory.StartNew的正确语法是什么?,vb.net,syntax-error,Vb.net,Syntax Error,我试图在VB.NET中启动一个新线程,但遇到语法问题 在C#中,我们可以使用以下方法完成相同的任务: var manualResetEvent = new ManualResetEvent(false); waitHandles.Add(manualResetEvent); var taskOne = Task.Factory.StartNew(() => new Thread(TaskToRun).Start(manualResetEvent)); taskOne.Wait(); Ta
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => new Thread(TaskToRun).Start(manualResetEvent));
taskOne.Wait();
TaskToRun
是一个带有单个对象参数的void方法
所有在线转换器生成类似以下内容的VB.NET代码:
Dim manualResetEvent = New ManualResetEvent(False)
waitHandles.Add(manualResetEvent)
Dim taskOne = Task.Factory.StartNew(Function() New Thread(AddressOf TaskToRun).Start(manualResetEvent))
taskOne.Wait()
没有理由启动一个只启动线程的任务。您应该直接创建任务。您应该能够通过以下方式在VB中执行此操作:
Dim manualResetEvent = New ManualResetEvent(False)
waitHandles.Add(manualResetEvent)
Dim taskOne = Task.Factory.StartNew(Function() TaskToRun(manualResetEvent))
taskOne.Wait() ' Blocks until task is complete
如果要强制任务使用专用线程,可以通过传递提示来实现。使用默认TaskScheduler,这将在专用线程(而不是线程池)上启动任务
作为参考,等效C#为:
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => TaskToRun(manualResetEvent));
taskOne.Wait();
为什么要创建一个启动线程的任务?其目的是创建多个线程,并在所有线程都已完成运行var waitTask=Task.Factory.StartNew(()=>WaitHandle.WaitAll(waitHandles.ToArray())时使用要通知的waithandler列表;waitTask.Wait()@萨米:如果是这样,只需创建多个任务,然后调用Task.WaitAll(任务)。不需要等待句柄和手动创建的线程。