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;
                });
        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值