不应该await Subtask()调用立即返回到主要功能控制? 当我运行这个程序时,它实际上会一直等到长时间运行的double for循环(在子任务内)完成,并且只有在调用以下Task.Delay()后才返回到main。 为什么在等待子任务()被调用后不会立即返回?如果等待的任务有一个长时间运行的CPU操作,等待呼叫不会返回呼叫给呼叫者
static void Main(string[] args)
{
Console.WriteLine("Main() threadId: " + Thread.CurrentThread.ManagedThreadId);
SuperTask();
Console.Read();
}
static async Task SuperTask()
{
Console.WriteLine("SuperTask threadId: " + Thread.CurrentThread.ManagedThreadId);
await SubTask();
}
static async Task SubTask()
{
Console.WriteLine("ThreadId for SubTask before await is: " + Thread.CurrentThread.ManagedThreadId);
var x = 0;
for (var i = 0; i < 25000; i++)
{
for (var j = 0; j < 250000; j++)
{
x -= i;
}
}
await Task.Delay(10000);
Console.WriteLine("ThreadId for SubTask is: " + Thread.CurrentThread.ManagedThreadId);
}
您没有观察到代码中的任何编译器警告? – Alex
只是建议我等待Main方法中调用SuperTask()的那个人 – Abhi