私のアプリケーションでは、次のように一連の操作を 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()
ただし、 を使用して作成された Task を呼び出すと.StartNew()
、例外がスローされます。
同期実行と非同期実行を切り替えるには、このタスクのリストをどのように作成すればよいですか?
編集: 概念的には、ここで私がやりたいことは次のとおりです。
If ConfigurationManager.AppSettings("ExecuteAsynchronously") = "1" Then
Task.WaitAll(Tasks.ToArray())
Else
Task.WaitAllAsynchronously(Tasks.ToArray())
End If
.WaitAllAsynchronously()
私はそれが存在しないことを知っていますが、私が達成しようとしていることの最終結果を見ることができます. .WaitAllAsynchronously()
各タスクを反復処理して同期的に実行するという拡張メソッドを作成する必要がある場合は、それを実行します。
は同期実行をサポートしていないため.StartNew()
、タスクのリストを実際に開始せずに作成する必要がありますが、同期実行と非同期実行の両方をサポートする方法で行います。