私は現在 TPL を研究しており、期待される出力をまだ生成していない最初のテストを考え出しました。私のコードが間違っているのか、それとも期待される結果なのか私を困惑させているのは、待つだけの20の作業を開始していて、すべてのプロセスが5秒で完了することを期待していたという事実です。予想される 5 秒ではなく 10 秒かかります。
助けてくれてありがとう。
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ConsoleApplication3Task
{
class Program
{
static void Main(string[] args)
{
var tasks = new List<Task<string>>();
for (var i = 0; i < 20; i++)
{
var task = Task.Factory.StartNew<string>((index) =>
{
var start = DateTime.UtcNow;
Task.Delay(TimeSpan.FromSeconds(5)).Wait();
var end = DateTime.UtcNow;
return string.Format("start={0}, duration={1} for task={2}", start.TimeOfDay, (end - start).TotalSeconds, index);
}, i);
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
tasks.ForEach((t) => Console.WriteLine(t.Result));
}
}
}
出力は次のとおりです。
start=10:07:19.8499784, duration=9,4992059 for task=0
start=10:07:19.8489785, duration=9,5002058 for task=1
start=10:07:19.8499784, duration=9,4992059 for task=2
start=10:07:19.8499784, duration=9,4992059 for task=3
start=10:07:19.8499784, duration=9,4992059 for task=4
start=10:07:19.8489785, duration=9,5002058 for task=5
start=10:07:19.8489785, duration=9,5002058 for task=6
start=10:07:19.8489785, duration=9,5002058 for task=7
start=10:07:20.8481051, duration=5,0016351 for task=8
start=10:07:21.8492322, duration=5,5006984 for task=9
start=10:07:22.8483595, duration=5,5046991 for task=10
start=10:07:23.8494862, duration=5,4996981 for task=11
start=10:07:24.8486135, duration=5,0006344 for task=12
start=10:07:25.8497402, duration=5,0116365 for task=13
start=10:07:25.8507412, duration=5,0106355 for task=14
start=10:07:26.8488675, duration=5,0096356 for task=15
start=10:07:27.3499306, duration=5,0076366 for task=16
start=10:07:27.3499306, duration=5,0076366 for task=17
start=10:07:28.3530586, duration=5,0126368 for task=18
start=10:07:28.3530586, duration=5,0126368 for task=19
Press any key to continue . . .