async/await使用的要点

async/await的使用:

(1)如果一个方法标注了async,则其返回值只能是 void,Task,Task<T>三者之一

(2)如果异步方法中没有await,那么这个方法将会以同步方式执行

(3)单个async方法中可以拥有多个await

(4)当遇到await表达式时,调用线程将会挂起,知道await方法完成。这里的挂起和阻塞是不同的,如以下代码,在Button_click方法中给,当第一次遇到await时,调用线程(UI线程)挂起,也就是相当于本次执行结束了,UI线程会正常显示了,UI不会被阻塞。等被调用的异步方法完成后,UI线程调度程序会重新接着执行,将返回的字符串赋值给textBox控件。这时会调用下一条 textBox.Text = await DoWorkAsync("Second string"),调用的线程会再次挂起。这时UI就能够把上一条调用textBox.Text = await DoWorkAsync("First string")时返回值First string给显示出来。

(5)await关键字将从视图中隐藏返回的Task对象,直接返回实际的返回值。

        private async void Button_Click(object sender, RoutedEventArgs e)
        {

            textBox.Text = await DoWorkAsync("First string");         //点击按钮后,等待5s在textBox中显示字符串First string
            textBox.Text = await DoWorkAsync("Second string");  //又过了5s后在textBox中显示字符串Second string
            textBox.Text = await DoWorkAsync("Third string");  //又过了5s后在textBox中显示字符串Third string

        }

        private async Task<string> DoWorkAsync(string myString)
        {
            return await Task.Run(

                () =>
                {
                    Thread.Sleep(5000);
                    return myString;
                });
        }

猜你喜欢

转载自blog.csdn.net/jiuzaizuotian2014/article/details/81148123