【发布时间】:2019-08-28 05:19:01
【问题描述】:
在这段代码中,您总是得到相同的结果。我不知道为什么这些任务的ID是1,3,4。
如果您在int index = Task.WaitAny(tasks); 处设置断点并等待 2 秒,您将获得良好的结果。第一种情况的结果不同,ID分别等于1、2、3。
public class Example
{
public static void Main()
{
var tasks = new Task[3];
var rnd = new Random();
for (int ctr = 0; ctr <= 2; ctr++)
tasks[ctr] = Task.Run( () => Thread.Sleep(rnd.Next(500, 3000)));
try
{
int index = Task.WaitAny(tasks);
Console.WriteLine("Task #{0} completed first.\n", tasks[index].Id);
Console.WriteLine("Status of all tasks:");
foreach (var t in tasks)
Console.WriteLine(" Task #{0}: {1}", t.Id, t.Status);
}
catch (AggregateException)
{
Console.WriteLine("An exception occurred.");
}
}
}
// The example displays output like the following:
// Task #1 completed first.
//
// Status of all tasks:
// Task #3: Running
// Task #1: RanToCompletion
// Task #4: Running
【问题讨论】:
-
但为什么总是先赢呢?为什么 id 对其他人来说是 +1?只需调试 10 次,总能得到相同的结果。
标签: c# multithreading task