前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#异步拉姆达表达式

C#异步拉姆达表达式

作者头像
vv彭
发布2021-03-07 10:54:49
8190
发布2021-03-07 10:54:49
举报
文章被收录于专栏:c#学习笔记c#学习笔记

代码如下:

代码语言:javascript
复制
        static void Main(string[] args)
        {
            ((Action)(async () =>{
                 var data = await HttpHelper.GetOnStringAsync("http://www.baidu.com");
                 Console.Write(data);

                 //To work on async function
                 //......


            }))();

            Console.ReadKey();
        }

使用上面那种方式,在拉姆达表达式body内直接使用异步方式,可以将一个同步方法直接变为一个异步方法执行,而不用在Main函数前面添加async关键字。

转载于:https://www.cnblogs.com/williamwsj/p/9634580.html

下面我们通过一个.NET Core控制台项目,来展示如何使用异步lambda表达式来初始化三种委托实例:Func<Task<TResult>>Func<Task>Action

我们还展示了如何将Main函数改造为异步函数。

代码语言:javascript
复制
using System;
using System.Threading.Tasks;

namespace NetCoreAsyncDelegate
{
    class Program
    {
        //注意Main函数可以通过返回Task类型,来添加async关键字成为异步函数,但是如果Main函数返回void,是不能够成为异步函数的,.NET编译器会直接报错
        static async Task Main(string[] args)
        {
            //构造一个Func<Task<int>>委托实例,使用异步lambda表达式来初始化Func<Task<int>>委托实例,要构造异步lambda表达式,只需要在lambda表达式前面加上async关键字,然后在表达式中使用await关键字进行异步等待即可,由于Func<Task<int>>委托要求返回一个Task<int>对象,所以和异步函数类似,我们在lambda表达式中返回了一个整数100
            Func<Task<int>> delegateFuncTaskReturn = async () =>
            {
                await Task.Delay(1000);

                return 100;
            };

            //使用await关键字,异步等待Func<Task<int>>委托实例执行完毕
            int returnedValue = await delegateFuncTaskReturn();

            Console.WriteLine("delegateFuncTaskReturn has been done and returned value {0}", returnedValue);

            //构造一个Func<Task>委托实例,使用异步lambda表达式来初始化Func<Task>委托实例,要构造异步lambda表达式,只需要在lambda表达式前面加上async关键字,然后在表达式中使用await关键字进行异步等待即可,由于Func<Task>委托要求返回一个Task对象,所以和异步函数类似,我们在lambda表达式中不返回任何值
            Func<Task> delegateFuncTaskNoReturn = async () =>
            {
                await Task.Delay(1000);
            };

            //使用await关键字,异步等待Func<Task>委托实例执行完毕
            await delegateFuncTaskNoReturn();

            Console.WriteLine("delegateFuncTaskNoReturn has been done");

            //构造一个Action委托实例,使用异步lambda表达式来初始化Action委托实例,要构造异步lambda表达式,只需要在lambda表达式前面加上async关键字,然后在表达式中使用await关键字进行异步等待即可,由于Action委托的返回类型为void,所以和异步函数类似,我们在lambda表达式中不返回任何值
            Action delegateActionTask = async () =>
            {
                await Task.Delay(1000);
                Console.WriteLine("delegateActionTask has been done");
            };

            //由于Action委托实例不返回Task或Task<TResult>对象,所以它无法在Main函数中使用await关键字来进行异步等待,所以Main函数无法直接得知Action委托实例是否执行完毕
            delegateActionTask();

            Console.WriteLine("Press any key to end...");
            Console.ReadKey();
        }
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档