2
我的程序正在創建一些任務來完成一些工作。 現在,我想在我退出程序之前等待所有任務完成。等待動態創建的任務,直到他們完成
我知道Task.WaitAll(...)
方法,但在我的情況下,我想動態創建一些任務 - >當調用Task.WaitAll()
時,它們不存在。
我現在的問題是: 如何等待所有正在運行的任務,直到它們完成?
這就是我現在要做的。
它的作品,但我想確保這也是一個很好的方法來做到這一點。
public class Test
{
public ConcurrentBag<Task> RunningTasks { get; set; }
public Test()
{
RunningTasks = new ConcurrentBag<Task>();
}
public void RunIt(){
//...create some Tasks asynchronously so they may be created in a few seconds and add them to the list like
//RunningTasks.Add(...);
//Just wait until all tasks finished.
var waitTask = Task.Run(() =>
{
while (true)
{
if (RunningTasks.All(t => t.IsCompleted))
break;
Thread.Sleep(1000);
}
});
waitTask.Wait();
}
}
感謝您的快速回答,但在我的情況下,我將在其他任務內創建任務(我有一些自定義邏輯來創建新的任務)和RunningTasks.ToArray() - 方法僅將當前任務添加到WhenAll-Method 。它將忽略稍後將添加到RunningTasks列表的任務。 –
@TobiasKoller我更新了我的答案。 – CodingGorilla
@CodingGrillla:您的更新解決方案將會發生OutOfMemory-Exception。所以我想我會用我的解決方案。無論如何謝謝你試圖幫助! –