簡單的async和await用法
阿新 • • 發佈:2021-07-13
如圖,需求是單擊按鈕後禁用按鈕,同時文字框可以輸入,後臺開啟執行緒,當執行緒完成時再啟用按鈕。首先我們可以使用傳統的非同步方式處理,程式碼如下:
private void button1_ClickAsync(object sender, EventArgs e) { this.button1.Enabled = false; Task.Factory.StartNew(() => { Thread.Sleep(5000); this.Invoke(new Action(() => { this.button1.Enabled = true; })); }); }
沒有什麼多解釋的,那麼我們如果使用await和async怎麼處理呢?如下:
private async void button1_ClickAsync(object sender, EventArgs e) { try { this.button1.Enabled = false; string result = await ActionAsync(); this.textBox1.Text = result; this.button1.Enabled = true; } catch (Exception ex) { this.textBox1.Text = ex.Message; } } private async Task<string> ActionAsync() { return await Task.Factory.StartNew(() => { Thread.Sleep(5000); return "success"; }); }
可以看出,我們就像是使用同步程式碼一樣的方式在編寫非同步程式碼,非常的爽。特此記錄,方便以後查閱。