在我的申請,我一堆操作添加到列表(任務)象下面這樣:.NET任務:我如何創建可以全部同步或異步執行的任務集合?
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,以便確定是否要同步或異步運行任務)。但是,在使用.StartNew()
創建的任務上調用.RunSynchronously()
會引發異常。
我該如何構建這個任務列表,以便在同步和異步執行之間切換?
編輯:概念,這裏是我想要做的是什麼:
If ConfigurationManager.AppSettings("ExecuteAsynchronously") = "1" Then
Task.WaitAll(Tasks.ToArray())
Else
Task.WaitAllAsynchronously(Tasks.ToArray())
End If
我知道.WaitAllAsynchronously()
不存在,但你仍然可以看到什麼,我試圖達到的最終結果。如果我必須創建一個名爲.WaitAllAsynchronously()
的擴展方法來遍歷每個任務並同步執行,那麼我將這麼做。
由於.StartNew()
不支持同步執行,我需要構建我的任務列表而不實際啓動它們,但支持同步和異步執行。
那麼不要使用TaskFactory和StartNew(),而是要創建一個新的Task。並使用子任務的內容輕鬆調試。我不知道同步訪問更容易調試...我寧願單元測試由任務調用的潛艇。 – GameAlchemist 2012-08-15 14:08:13
我剛發佈了一個答案。我不想在那裏偷你的雷霆,但我已經嘗試過一次。問題是我沒有爲我剛發現我需要做的每個線程調用'.Start()'。不過,感謝您的評論。 Upvoted。 – oscilatingcretin 2012-08-15 14:48:52