gpt4 book ai didi

vb.net - Task.Factory.StartNew的正确语法是什么?

转载 作者:行者123 更新时间:2023-12-03 08:00:43 25 4
gpt4 key购买 nike

我正在尝试在VB.NET中启动新线程,并且遇到语法问题。

在C#中,这是我们可以使用以下方法完成相同任务的方法:

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

如果要强制任务使用专用线程,可以通过传递 LongRunning提示来实现。使用默认的TaskScheduler,这将在专用线程(而不是ThreadPool)上启动任务。

作为引用,等效的C#为:
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => TaskToRun(manualResetEvent));

taskOne.Wait();

关于vb.net - Task.Factory.StartNew的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335632/

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