異步處理語法糖
- 方便進行開啓異步任務並等待結果完成的操作
- async 表明該方法是異步方法
- await 表面要等待task完成再執行後續代碼
特性
- async 修飾method,調用async的方法會開啓新的線程
- await
- 線程
async void TestVoid()
{
Console.WriteLine("TestVoid 1()方法裏面線程ID: {0}", Thread.CurrentThread.ManagedThreadId);
await Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("TestVoid Run()方法裏面線程ID: {0}", Thread.CurrentThread.ManagedThreadId);
return "我是返回值";
});
//後面的代碼仍然是工作者線程在執行
Console.WriteLine("TestVoid 2()方法裏面線程ID: {0}", Thread.CurrentThread.ManagedThreadId);
}
使用
async Task TestVoid()
{
await Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("TestVoid()方法裏面線程ID: {0}", Thread.CurrentThread.ManagedThreadId);
return "我是返回值";
});
}
async Task<int> ComputeValue()
{
return await Task.Run(() =>
{
Thread.Sleep(1);
return 0;
});
}
//順序執行,TestVoid裏面的耗時操作完成之前後面的代碼不會執行,即ComputeValue()不會執行
await TestVoid();
var valu = await ComputeValue();
//不await,TestVoid直接執行,就像開啓了一個新線程不等待結果一樣
TestVoid();
var valu = await ComputeValue();