Task Parallel Library の Task.WaitAll(..) について頭を悩ませようとしています。
次のコードを使用してテストを実行し、2 つのタスクをシミュレートしようとしています。待機する時間. 指定された時間は 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);
}
timeSpan に関しては、timeSpan 変数の代わりに 5000 を直接渡そうとしましたが、うまくいきません。次の出力が得られます。
1
2
他のスレッドが予想される待機時間よりも長く実行されているため、次の出力のみが得られると予想されます。
1
私はこれを誤解していますか、それともこのテストを間違っていますか?