[英]Why use async await if same can be achieved by Task.run
以下兩種方法的行為是否相同? 它們的工作方式是否存在內部差異? 延遲結束后,這兩種方法都將釋放UI線程並繼續執行。
public async Task DoSomethingAsync()
{
Console.WriteLine("Test Async start");
//Any long running operation
await Task.Delay(5000);
Console.WriteLine("Test Async end");
}
public void TestTask()
{
Console.WriteLine("Test Task start");
Task.Run(() =>
{
//Any long running operation
Thread.Sleep(10000);
}
).ContinueWith((prevTask) =>
{
Console.WriteLine("Test Task end");
});
}
**output**:
Test Async start
Test Task start
Test Async end
Test Task end
async和await關鍵字不會導致創建其他線程。 異步方法不需要多線程,因為異步方法不會在自己的線程上運行。 該方法在當前同步上下文上運行,並且僅在該方法處於活動狀態時才在線程上使用時間。
您不需要為任務使用System.Threading。 下面的代碼是因為CancellationToken而做的。
與Task的區別在於,您可以訪問主(UI)線程上的屬性。
請參閱數量。 您甚至可以寫主線程,但可能不是一個好習慣。
async Task<int> TaskDelayAsync(CancellationToken ct, IProgress<int> progress)
{
Debug.WriteLine(Quantity);
int i = 0;
while (true)
{
i++;
//Debug.WriteLine(i);
progress.Report(i);
ct.ThrowIfCancellationRequested();
await Task.Delay(500);
}
return i;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.