C#异步编程

在这里插入图片描述

static string Greeting(string name)
        {
            Task.Delay(3000).Wait();
            return $"Hello,{name}";
        }

        static Task<string> GreetAsync(string name)
        {
            return Task.Run<string>(() =>
            {
                return Greeting(name);
            });
        }

        async static void CallerWithAsync()
        {
            Console.WriteLine("1");
            string result = await GreetAsync("倪司令");
            Console.WriteLine("2");
            Console.WriteLine(result);
        }

定义方法GreetingAsync,可以使方法异步化。基于任务的异步模式指定,在异步方法名后加上Async后缀,并返回一个任务。异步方法GreetingAsync和同步方法Greeting具有相同的输入参数,但是它返回的是 Task。Task定义了一个返回字符串的任务。一个比较简单的做法是用Task.Run方法返回一个任务。泛型版本的Task.RunO)创建一个返回字符串的任务:
可以使用await关键字来调用返回任务的异步方法 GreetingAsync。使用 await关键字需要有用async修饰符声明的方法。在GreetingAsync方法完成前,该方法内的其他代码不会继续执行。但是,启动CallerWithAsync方法的线程可以被重用。该线程没有阻塞:
如果异步方法的结果不传递给变量,也可以直接在参数中使用await关键字。在这里,GreetingAsync方法返回的结果将像前面的代码片段一样等待,但是这一次的结果会直接传给WriteLine方法:
在这里插入图片描述

static void CallerWithContinuationTask()
        {
            Task<string> t1 = GreetAsync("阿斯顿马丁");
            t1.ContinueWith(t =>
            {
                Console.WriteLine(t.Result);
            });
        }

GreetingAsync方法返回一个Task对象。该Task对象包含任务创建的信息,并保存到任务完成。Task类的 ContinueWith方法定义了任务完成后就调用的代码。指派给 ContinueWith方法的委托接收将已完成的任务作为参数传入,使用Result属性可以访问任务返回的结果:编译器把await关键字后的所有代码放进ContinueWith方法的代码块中来转换await关键字。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值