System.Threading.Tasks を使用しています
ここにサンプルコードがあります::
ケース 1::
List<string> testTerms = new List<string>();
testTerms.Add("test1");
testTerms.Add("test2");
List<Task> lstTask = new List<Task>();
foreach (string tTerm in testTerms)
{
Task<List<string>> task1 =
Task<List<string>>.Factory.StartNew(() => SearchString());
lstTask.Add(task1);
}
Task[] searchTasks = (Task[])lstTask.ToArray();
Task.WaitAll(searchTasks.ToArray(), 1000);
public List<string> SearchString()
{
.....
Thread.Sleep(20000);
return list;
}
これで、すべてのタスクが完了するまで 1000 ミリ秒待機する必要があります。しかし、私は提供Thread.Sleep(20000);
しましたSearchString()
ので、何が起こるかは、私が提供したとしても、ここで20秒間待機しますTask.WaitAll(searchTasks.ToArray(), 1000);
[これは予期されていません]
ここで、別のシナリオを考えてみましょう。
ケース 2
Task[] tasks = new Task[0]
{
Task.Factory.StartNew(() => SearchString())
};
Task.WaitAll(tasks,1000);
Thread.Sleep(20000);
この場合、 で提供した場合でも、1000 ミリ秒しか待機しませんSearchString()
。
【想定内】
したがって、ケース 2は正常に動作していますが、ケース 1です。
では、ケース 1の問題点は何ですか?