C# 如何为.Net 4.5上的任务使用自定义TaskWaiter?

C# 如何为.Net 4.5上的任务使用自定义TaskWaiter?,c#,asynchronous,async-await,C#,Asynchronous,Async Await,我可以通过在Task上提供扩展方法GetAwaiter来使用.NET4.0创建自己的TaskAwaiter,但在使用.NET4.5运行代码时,这是不可能的 Net 4.5上的Task类有一个名为GetWaiter的方法,我的扩展方法永远不会被调用 我的第一点意见是: 我可以在另一个类(不是Task)上创建自定义等待器,但异步方法只能返回Task或void,并且封装每个Task/异步方法调用并不实用/优雅。 我的2点意见: 我需要的是在创建(或等待)任务时自动保存数据,并在continua

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

Net 4.5上的Task类有一个名为GetWaiter的方法,我的扩展方法永远不会被调用


我的第一点意见是: 我可以在另一个类(不是Task)上创建自定义等待器,但异步方法只能返回Task或void,并且封装每个Task/异步方法调用并不实用/优雅。

我的2点意见: 我需要的是在创建(或等待)任务时自动保存数据,并在continuation方法上检索该数据,而无需更改同步上下文。

我的3点意见: 在.NET4.0和我的自定义TaskWaiter中,一切都按预期运行。
你不能这样做。自定义等待器用于自定义类型(即使这样,通常也有更好的方法)。一种替代方法是对
任务
使用扩展方法,类似于
配置等待
的工作方式

如果您只想传递本地数据,那么只需使用lambda变量捕获

如果您想传送“环境”数据,那么可以使用
CallContext.LogicalSetData
CallContext.LogicalGetData
。但是,您应该只在那里存储不可变的数据,并且该解决方案只能在.NET4.5上工作。我还有更多