欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#關(guān)鍵字async/await用法

 更新時(shí)間:2019年12月09日 08:16:13   作者:程序杰杰  
在本篇文章里小編給大家整理的是關(guān)于C#關(guān)鍵字async/await用法及相關(guān)實(shí)例,需要的朋友們學(xué)習(xí)下。

經(jīng)過一番的探索,終于搞清楚關(guān)鍵字async/await 在.net4.5之后可用的巧妙之處,在這里記錄一下也與大家分享一下個(gè)人的心得體會(huì)

async:異步執(zhí)行

await:異步執(zhí)行中的等待其執(zhí)行完(最大的優(yōu)點(diǎn)是它是后臺(tái)等待,因此不阻塞GUI,界面交互非常的好)

使用async方法要定義async Task或者async Task<T> 最好不要定義async void方法來調(diào)用,async void是處理程序等,總結(jié)結(jié)論就是要使用async Task或者async Task<T>

使用asyn方法,可以用同步的格式,執(zhí)行異步的代碼,如下:

int a = 0;
    private void button1_Click(object sender, EventArgs e)
    {
      Task.Run(()=> {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        Thread.Sleep(2000);
        sw.Stop();
        SetText(textBox1,this, sw.ElapsedMilliseconds.ToString());
      });
      var eee=Ce_async();//前面接收值,這樣方法立即返回,主線程繼續(xù)執(zhí)行
      //eee.IsCompleted
      textBox3.Text = "主線程繼續(xù)向下執(zhí)行";


    }
    private async Task Ce_async()
    {
      await Task.Run(async ()=> {
        while (true)
        {
          await Task.Delay(100);//Thread.Sleep(2000);23           a += 1;
          SetText(textBox2, this, a.ToString());
        }
      });
    }



    private delegate void SetTextdelegate(Control cr,Form f,string str);
    private void SetText(Control cr, Form f, string str)
    {
      if (f.InvokeRequired) { f.Invoke(new SetTextdelegate(SetText), cr, f, str); }
      else { cr.Text = str; }
    }

正如上圖第11行注釋,使用接收值來接收async方法,該方法會(huì)立即返回值,主程序繼續(xù)向下執(zhí)行,該方法后臺(tái)繼續(xù)跑。

那么肯定有小伙伴與我當(dāng)初有同樣的疑惑,這樣我執(zhí)行用線程在這里執(zhí)行不也可以嗎?為什么要用async關(guān)鍵字呢,他到底有什么好處?

比如有一種情況:我的主線程如何有需要休眠等待的情況,那么直接使用Thread.Sleep(),會(huì)使界面卡死,如果此時(shí)我將方法修改為async,那么只需要await Task.Delay() 這樣也會(huì)等待時(shí)間完成后再向下執(zhí)行,但是它不會(huì)使主界面處于假死狀態(tài),如下:

private async void button1_Click(object sender, EventArgs e)
    {
      await Task.Delay(1000);
      var aaa=Task.Run(() =>
      {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        Thread.Sleep(2000);
        sw.Stop();
        SetText(textBox1, this, sw.ElapsedMilliseconds.ToString());
      });
      var eee=Ce_async();//前面接收值,這樣方法立即返回,主線程繼續(xù)執(zhí)行
      //eee.IsCompleted
      textBox3.Text = "主線程繼續(xù)向下執(zhí)行";
    }

再次重復(fù)一點(diǎn),在async方法中使用接收值來接收Task,會(huì)使得Task不必加上await關(guān)鍵字而被迫使得主線程需要等待它執(zhí)行完才能向下執(zhí)行,接收值的目的就是立即得到返回值

使用接收值來接收Task會(huì)直接返回,代碼繼續(xù)向下執(zhí)行,這一點(diǎn)很重要?。?!

上圖的第3行,如下:

await Task.Delay(1000);

其中await只能用在異步方法中,await會(huì)使得該線程等待await處的線程執(zhí)行完,方可執(zhí)行下方代碼,正如該處代碼所示,使用await Task.Delay(100); 代替 Thread.Sleep(100)

以上就是腳本之家給大家整理的全部知識點(diǎn),希望能夠幫助到大家。

相關(guān)文章

  • C#實(shí)現(xiàn)繪制浮雕圖片效果實(shí)例

    C#實(shí)現(xiàn)繪制浮雕圖片效果實(shí)例

    這篇文章主要介紹了C#實(shí)現(xiàn)繪制浮雕圖片效果實(shí)例,是C#程序設(shè)計(jì)中非常實(shí)用的一個(gè)功能,需要的朋友可以參考下
    2014-08-08
  • C#?wpf嵌入winform控件的示例詳解

    C#?wpf嵌入winform控件的示例詳解

    wpf的強(qiáng)大界面能力,再加上winform的性能以及靈活性,那基本上什么界面都能夠做的很好,本文我們就來看看如何在C#?wpf中嵌入winform控件吧
    2024-03-03
  • C#語言async?await工作原理示例解析

    C#語言async?await工作原理示例解析

    這篇文章主要為大家介紹了C#語言async?await工作原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 使用C#寫了一個(gè)可以推算火車票身份證號碼的小程序

    使用C#寫了一個(gè)可以推算火車票身份證號碼的小程序

    這篇文章主要介紹了使用C#寫了一個(gè)可以推算火車票身份證號碼的小程序 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • WPF中NameScope的查找規(guī)則詳解

    WPF中NameScope的查找規(guī)則詳解

    這篇文章主要給大家介紹了關(guān)于WPF中NameScope的查找規(guī)則的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • C#實(shí)現(xiàn)帶陰歷顯示的日期代碼

    C#實(shí)現(xiàn)帶陰歷顯示的日期代碼

    這篇文章主要介紹了C#實(shí)現(xiàn)帶陰歷顯示的日期代碼,可以顯示節(jié)假日及農(nóng)歷日期,在C#項(xiàng)目開發(fā)中非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件

    C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了如何利用C#調(diào)用OutLokk實(shí)現(xiàn)發(fā)送郵件的功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#使用NAudio實(shí)現(xiàn)監(jiān)聽系統(tǒng)聲音

    C#使用NAudio實(shí)現(xiàn)監(jiān)聽系統(tǒng)聲音

    這篇文章主要為大家詳細(xì)介紹了C#如何使用NAudio實(shí)現(xiàn)監(jiān)聽系統(tǒng)聲音并屏蔽麥克風(fēng)其他聲音,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下
    2024-02-02
  • C#圖像處理之圖像目標(biāo)質(zhì)心檢測的方法

    C#圖像處理之圖像目標(biāo)質(zhì)心檢測的方法

    這篇文章主要介紹了C#圖像處理之圖像目標(biāo)質(zhì)心檢測的方法,可實(shí)現(xiàn)C#計(jì)算圖像質(zhì)心的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#使用晚綁定來實(shí)現(xiàn)壓縮Access數(shù)據(jù)庫的方法

    C#使用晚綁定來實(shí)現(xiàn)壓縮Access數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#使用晚綁定來實(shí)現(xiàn)壓縮Access數(shù)據(jù)庫的方法,項(xiàng)目開發(fā)中有一定的實(shí)用價(jià)值,需要的朋友可以參考下
    2014-08-08

最新評論