C#中如何使用异步lambda表达式来初始化委托实例
下面我们通过一个.NET Core控制台项目,来展示如何使用异步lambda表达式来初始化三种委托实例:Func<Task<TResult>>、Func<Task>、Action
我们还展示了如何将Main函数改造为异步函数。
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(); } } }
希望上面的例子对大家有所帮助~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2010-01-09 C#积累(一)——扩展方法就近原则和匿名类型的成员探讨