3

コードで、不明な数のタスクを開始し、使用したい状況がありますTask.WaitAll()

このようなもの:

if (condition) 
{ 
    var task1 = Task.Factory.StartNew (call the web service1...);
} 

if (condition) 
{ 
    var task2 = Task.Factory.StartNew (call the web service2...);
}

if (condition) 
{ 
    var task3 = Task.Factory.StartNew (call the web service3...); 
}

Task.WaitAll(task1, task2, task3);

言えないのが問題

Task.WaitAll(task1, task2 , task3)

どちらが実際に起動するか分からないからです。解決策はありますか?

4

4 に答える 4

6

タスクのリストを使用して、タスクをリストに動的に追加できます。

var tasks = new List<Task>();

if (condition) 
{ 
    var task = Task.Factory.StartNew (call the web service1...);
    tasks.Add(task);
} 

if (condition) 
{ 
    var task2 = Task.Factory.StartNew (call the web service2...);
     tasks.Add(task2);
}

if (condition) { 
    var task3 = Task.Factory.StartNew (call the web service3...); 
    tasks.Add(task3);
}

Task.WaitAll(tasks.ToArray());
于 2013-01-21T10:28:18.407 に答える
3

実際に開始したタスクのリストを作成して実行するTask.WaitAll(taskList.ToArray())

if(condition)
{
    var task1 = Task.Factory.StartNew (call the web service1...);
    taskList.Add(task1);
}
// etc...
于 2013-01-21T10:27:36.077 に答える
0

通常、タスクのリストをリスト (タスク) に保存し、次のコードを使用することができます。

    Task.WaitAll(tasks.ToArray());
于 2013-01-21T10:28:12.357 に答える
0

方法: 1 つまたは複数のタスクが完了するまで待機する を参照してください。の配列を待つことができますTask

于 2013-01-21T10:28:33.040 に答える