我正在试图理解任务并行库中的Task.WaitAll(..)。
我正在运行一个测试,使用以下代码来模拟两个任务,一个任务将运行比等待的指定时间长(10秒),另一个任务将运行比等待的指定时间短(3秒)。指定的等待时间为5秒。我使用的代码如下:
Task<int>[] tasks = new Task<int>[]
{
Task.Factory.StartNew<int>(()=>
{
Thread.Sleep(10000);
return 1;
}),
Task.Factory.StartNew<int>(()=>
{
Thread.Sleep(3000);
return 2;
})
};
TimeSpan timeSpan = new TimeSpan(0, 0, 5);
Task.WaitAll(tasks,timeSpan);
int[] results = new int[tasks.Length];
for(int i = 0; i < tasks.Length;i++)
{
Console.WriteLine(tasks[i].Result);
}
就时间跨度而言,我也尝试直接传递5000而不是timeSpan变量,但不起作用。我得到了以下输出:
1
2
我期望只得到以下输出,因为另一个线程执行的时间超过了预期的等待时间。
1
我是否误解了这个,或者测试做错了?