4

複数のスレッドが終了するのを待つより短い方法はありますか? たぶん ContinueWhenAll を使用しています...しかし、残りのコードを非同期で実行したくありません。

List<object> objList = // something

List<Task> taskHandles = new List<Task>();
for(int i = 0; i < objList.Count; i++) {

    taskHandles.Add(Task.Factory.StartNew(() => { Process(objList[i]); }));

}

foreach(Task t in taskHandles) { t.Wait(); }

DoSomeSync1();
..
DoSomeSync2();
..
DoSomeSync3();
..

// I could have used ContinueWhenAll(waitHandles, (antecedent) => { DoSomeSync...; });
// but I'd rather not have to do that.
// It would be nice if I could have just done:

Parallel.ForEach(objList, (obj) => { Process(obj); }).WaitAll();

// or something like that.
4

1 に答える 1

12

for()ループを置き換えるParallel.For()Parallel.ForEach()、タスクリストなどを必要としない場合。ForEach の後に .WaitAll() が必要な理由がわかりませんが、必要ではないようです。

すべてのタスクが完了すると、並列ループが停止します。

于 2010-09-08T15:15:33.813 に答える