C#的async和await

学习。。

首先我们写个例子:


public class MyClass
    {
        public MyClass()
        {
            //调用该方法不会阻塞  
            ShowValue(); 


            Console.WriteLine("MyClass() End.");
        }
        public Task<int> GetValueAsync(int number1, int number2)
        {
            return Task.Run(() =>
            {
                for (var i = 0; i < 1000000; i++)
                {
                    number1 = number1 + number2;
                }
                return number1;
            });
        }


        public async void ShowValue()
        {
            //此处会开新线程处理GetValueAsync任务,然后方法马上返回  
            double result = await GetValueAsync(2143, 55);


            //这之后的所有代码都会被封装成委托,在GetValueAsync任务完成时调用  
            Console.WriteLine("Value is : " + result);
        }


        #region 其他实例
        ///异步打印传入的字符串
        public async static Task<string> AsyncAdd(string str)
        {
            string result = await PringString(str);
            return result;
        }
        public async static Task<string> PringString(string str)
        {
            return "Hello World" + str;
        }
        #endregion
    } 


上面在MyClass的构造函数里调用了async关键字标记的异步方法DisplayValue(),DisplayValue()方法里执行了一个await关键字标记的异步任务GetValueAsync(),这个异步任务必须是以Task或者Task<TResult>作为返回值的,而我们也看到,异步任务执行完成时实际返回的类型是void或者TResult,DisplayValue()方法里await GetValueAsync()之后的所有代码都会在异步任务完成时才会执行。


DisplayValue()方法实际执行的代码如下:

public void DisplayValue()  
{  
    System.Runtime.CompilerServices.TaskAwaiter<double> awaiter = GetValueAsync(1234.5, 1.01).GetAwaiter();  
    awaiter.OnCompleted(() =>  
        {  
            double result = awaiter.GetResult();  
            System.Diagnostics.Debug.WriteLine("Value is : " + result);  
        });  
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值