码迷,mamicode.com
首页 > Windows程序 > 详细

C# async 方法怎么被正确的消费 (新篇)

时间:2019-08-13 15:47:16      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:成熟   一个   task   object   ret   现在   bsp   tde   方式   

我早些时候写过一篇同名blog 上面的一些 观点是不准确的,欠缺的

除了使用复杂的 局部委托对 async方法进行消费以名,官方的api的标准做法是

直接在同步环境里 调用async的方法后面加一个 .Wait()即可 这个简单且容易,也没有编译警告

 

另外还有静态方法 Task.WaitAll, WaitAny ,等方法 以带来异步编程的时间收益

我想补充的另一点是,async,await这种 异步模型得到了广泛认可,越发成熟优秀,比如 js里面 也同样被引入

在C#里面 委托是函数式编程的一个重要内核,在现在的C#的编程里面 委托被大量使用,比如linq模式 .net core的 中间件模式等

委托有一个不易察觉的特征必须要注意,就是定义的使用 返回 Task 或 Task<T>的 委托 它的实例可以被 同步式的赋值也可以

加上 async关键字异步赋值。举个例子:

//...
public delegate TestDelegate1 Task M(object p);

TestDelegate1 td1=o=>{ return Task.ComplatedTask;}  //同步的方式 ok
TestDelegate1 td2=async o=>{ await Task.ComplatedTask;}  //异步的方式 ok

public delegate TestDelegate2 Task<T> M<T>(object p);

TestDelegate2 td21=o=>{ 
    var x= default(Task<T>);
    x=Some();
    return x;    
}  //同步的方式 ok
TestDelegate2 td22=async o=>{ 
    var x= default(Task<T>);
    x=await Some();
    return x;    
}  //异步的方式 ok

 

C# async 方法怎么被正确的消费 (新篇)

标签:成熟   一个   task   object   ret   现在   bsp   tde   方式   

原文地址:https://www.cnblogs.com/ProjectDD/p/11345957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!