我正在使用 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()
。
[这是预期的]
所以Case 2工作正常,但Case 1。
那么案例 1的问题是什么?