天天看點

2:C#TPL探秘

理論:

1、 隻要方法是 Task類型的傳回值,都可以用 await 來等待調用擷取傳回值。

2、 如果一個傳回 Task類型的方法被标記了 async,那麼隻要方法内部直接 return T 這個 類型的執行個體就可以。

3、 一個傳回 Task類型的方法沒有被标記了 async,那麼需要方法内部直接 Task 執行個體。

實踐(自己添加一個按鈕):

2:C#TPL探秘
2:C#TPL探秘

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

繼續閱讀