我創建了一個類似以下代碼的任務
Task task = new(async () =>
{
// without await Task Delay dont work
await Task.Delay(TimeSpan.FromSeconds(5));
Console.WriteLine("Task is down");
});
task.Start();
var awaiter = task.GetAwaiter();
awaiter.OnCompleted(() =>
{
Console.WriteLine("Task is Completed");
});
為什么先列印任務完成后任務down 任務完成,如果我的操作還沒有完成就列印
uj5u.com熱心網友回復:
因為Task建構式不具備異步意識。沒有多載接受動作Task,因此通過建構式和異步 lambda 創建的任務將在await遇到第一個時立即完成。
一般來說,你應該盡量避免使用Task建構式, Task.Run而是更喜歡。從檔案:
此建構式只應在需要將任務的創建和啟動分開的高級場景中使用。
實體化 Task 物件并啟動任務的最常見方法不是呼叫此建構式,而是呼叫靜態方法Task.Run(Action)或TaskFactory.StartNew(Action)方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480457.html
