在我的应用程序中,我向 List(Of Task) 添加了一堆操作,如下所示:
Dim Tasks As New List(Of Task)
Tasks.Add(Task.Factory.StartNew(Sub()
System.Threading.Thread.Sleep(3000)
End Sub))
Tasks.Add(Task.Factory.StartNew(Sub()
System.Threading.Thread.Sleep(3000)
End Sub))
Task.WaitAll(Tasks.ToArray())
当我调用时Task.WaitAll(Tasks.ToArray())
,它会按预期同时执行所有任务。但是,调试/单步执行线程方法有点困难,所以我希望能够同步执行所有这些(我会在我的配置文件中创建一个 AppSetting 来确定是否同步或异步运行任务)。但是,调用.RunSynchronously()
使用创建的任务会.StartNew()
引发异常。
我应该如何构建这个任务列表,以便在同步和异步执行之间切换?
编辑: 从概念上讲,这是我想做的:
If ConfigurationManager.AppSettings("ExecuteAsynchronously") = "1" Then
Task.WaitAll(Tasks.ToArray())
Else
Task.WaitAllAsynchronously(Tasks.ToArray())
End If
我知道这.WaitAllAsynchronously()
不存在,但你仍然可以看到我想要实现的最终结果。如果我必须创建一个名为.WaitAllAsynchronously()
迭代每个任务并同步执行它的扩展方法,那么这就是我要做的。
由于.StartNew()
不支持同步执行,我需要构建我的任务列表而不实际启动它们,但是以一种同时支持同步和异步执行的方式。