Async和Await

async和await需要配合使用。异步方法中,遇到await就会立马返回。
如以下代码,会先输入nihao,再输出hello A。
异步方法没有返回值可以使用void标记。如果有返回值需要使用Task标记返回类型。

static void Main(string[] args)
        {
            AMethod();
            Console.WriteLine("nihao");
            Console.ReadLine();
        }

        public static async void AMethod()
        {
            await GetValueAsync(1234.5, 1.01);
            Console.WriteLine("hello A");
        }

        public static Task<double> GetValueAsync(double num1, double num2)
        {
            return Task.Run(() => { 
                for(int i = 0; i < 1000000; i++)
                {
                    num1 = num1 / num2;
                }
                return num1;
            });
        }

调用异步方法时还可以配置await。ConfigureAwait默认为true,即线程切换时保存上下文,供await之后代码使用。如果配置ConfigureAwait(false),则上下文为空。如:HttpContext.Current 为null

await GetValueAsync(1234.5, 1.01).ConfigureAwait(false);

调用异步方法的结果时,会阻塞线程。

  var x = AMethod();
  Console.WriteLine(x.Result);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值