繁体   English   中英

如何对.Net 4.5上的任务使用自定义TaskAwaiter?

[英]How do I use a custom TaskAwaiter for tasks on .Net 4.5?

我可以通过在Task上提供扩展方法GetAwaiter来用.Net 4.0创建我自己的TaskAwaiter,但是用.Net 4.5运行代码时,这是不可能的。

.Net 4.5上的Task类具有一个称为GetAwaiter的方法,而我的扩展方法将永远不会被调用。


我的1条评论:我可以在另一个类(而不是Task)上创建一个自定义的等待者,但是异步方法只能返回Task或void,并且包装每个任务/异步方法调用都不是实用/优雅的。

我的2条评论:我需要的是在创建(或等待)任务时自动保存数据,并在继续方法上检索此数据,而无需更改同步上下文。

我的3条评论:.Net 4.0和我自定义的TaskAwaiter一切正常。

你做不到 定制等待器用于定制类型(即使那样,通常还有一种更好的处理方式)。 一种替代方法是对Task使用扩展方法,类似于ConfigureAwait工作方式。

如果只想传递本地数据,则只需使用lambda变量捕获。

如果要传递“环境”数据,则可以使用CallContext.LogicalSetDataCallContext.LogicalGetData 但是,您只应在此处存储不可变数据,并且该解决方案适用于.NET 4.5。 在博客上有更多详细信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM