我对.Net中的Task.Status感到困惑。我同步运行2个任务,等待所有任务完成。代码很简单:
"variables": {
"dnsservers": [
"10.10.10.10"
]
},
var task1 = Task.Run(() => Task.Delay(9000));
Debug.WriteLine(DateTime.Now + $" Task 1 started (Id={task1.Id})");
var task2 = Task.Run(() => Task.Delay(8500));
Debug.WriteLine(DateTime.Now + $" Task 2 started (Id={task2.Id})");
Task firstFinieshed = await Task.WhenAny(task1, task2);
Debug.WriteLine(DateTime.Now + $" 'JDE_Scan' - First action finished (Id={firstFinieshed.Id},Status={firstFinieshed.Status}). Task1 status={task1.Status}, Task2 status={task2.Status}");
await Task.Delay(1000);
Debug.WriteLine(DateTime.Now + $" 'JDE_Scan' - . Task1 status={task1.Status}, Task2 status={task2.Status}");
因此,似乎一切都按预期进行(任务正在同步运行,较短的任务首先完成),但是我希望较长的任务在第一个任务完成时能够运行(而不是WaitingForActivation)。 1秒后,它是RanToCompletion,这是正确的。 我是在做错什么还是.Net行为有些奇怪?我在Xamarin.forms项目中运行它,不知道是否相关信息。