理論:
1、 隻要方法是 Task類型的傳回值,都可以用 await 來等待調用擷取傳回值。
2、 如果一個傳回 Task類型的方法被标記了 async,那麼隻要方法内部直接 return T 這個 類型的執行個體就可以。
3、 一個傳回 Task類型的方法沒有被标記了 async,那麼需要方法内部直接 Task 執行個體。
實踐(自己添加一個按鈕):
private async void button1_Click(object sender, EventArgs e)
{
#region 方法一:
//string i1 = await F1Async();//保證異步任務執行完
//MessageBox.Show("i1=" + i1);
//string i2 = await F2Async();
//MessageBox.Show("i2=" + i2);
#endregion
#region 方法二:
Task<string> task1 = F1Async();
Task<string> task2 = F2Async();
string i1 = await task1;//這裡保證task1的任務一定執行完,并不是這裡才執行異步任務。
MessageBox.Show("i2=" + i1);
string i2 = await task2;
MessageBox.Show("i2=" + i2);
#endregion
}
static Task<string> F1Async()
{
MessageBox.Show("F1 Start");
return Task.Run(() =>
{
System.Threading.Thread.Sleep(1000);
MessageBox.Show("F1 Run");
return "F1";
});
}
static Task<string> F2Async()
{
MessageBox.Show("F2 Start");
return Task.Run(() =>
{
System.Threading.Thread.Sleep(2000);
MessageBox.Show("F2 Run");
return "F2";
});
}
View Code