不應該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