c# 多線程異步變成之async await簡明攻略

異步處理語法糖

  • 方便進行開啓異步任務並等待結果完成的操作
  • async 表明該方法是異步方法
  • await 表面要等待task完成再執行後續代碼

特性

  • async 修飾method,調用async的方法會開啓新的線程
  • await
    • 修飾返回值進行等待
    • 修飾Task表明是異步任務
  • 線程
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);
}

使用

  • 返回void類型
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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章