91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

async與await關鍵字怎么在C#項目中使用

發布時間:2021-03-31 17:32:41 來源:億速云 閱讀:150 作者:Leah 欄目:編程語言

本篇文章為大家展示了async與await關鍵字怎么在C#項目中使用,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

async:異步執行

await:異步執行中的等待其執行完(最大的優點是它是后臺等待,因此不阻塞GUI,界面交互非常的好)

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

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

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();//前面接收值,這樣方法立即返回,主線程繼續執行
      //eee.IsCompleted
      textBox3.Text = "主線程繼續向下執行";


    }
    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方法,該方法會立即返回值,主程序繼續向下執行,該方法后臺繼續跑。

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

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

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();//前面接收值,這樣方法立即返回,主線程繼續執行
      //eee.IsCompleted
      textBox3.Text = "主線程繼續向下執行";
    }

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

使用接收值來接收Task會直接返回,代碼繼續向下執行,這一點很重要!!!

上圖的第3行,如下:

await Task.Delay(1000);

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

上述內容就是async與await關鍵字怎么在C#項目中使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汝南县| 双鸭山市| 友谊县| 玛曲县| 台中县| 安溪县| 福海县| 沈丘县| 长泰县| 阿图什市| 荥阳市| 宁蒗| 钟祥市| 梨树县| 田东县| 兰坪| 丹东市| 兴业县| 五峰| 阳泉市| 左云县| 宁海县| 太湖县| 龙口市| 临泉县| 顺义区| 曲周县| 德昌县| 枣阳市| 九江市| 宁安市| 弥渡县| 全南县| 绍兴县| 兴义市| 禹州市| 辛集市| 桑植县| 定州市| 阿坝县| 宜兰市|