由于C#的任务是一类,你显然不能投下Task<TDerived>
到Task<TBase>
。如何将任务<TDerived>转换成任务<TBase>?
但是,你可以这样做:
public async Task<TBase> Run() {
return await MethodThatReturnsDerivedTask();
}
是否有一个静态任务的方法我可以打电话得到Task<TDerived>
实例,它本质上只是指向底层任务和注塑结果呢?我想喜欢的东西:
public Task<TBase> Run() {
return Task.FromDerived(MethodThatReturnsDerivedTask());
}
这样的方法是否存在?仅仅为此目的使用异步方法是否有任何开销?
为什么不'返回MethodThatReturnsDerivedTask()ContinueWith(任务=>(TBASE)task.Result,TaskContinuationOptions .ExecuteSynchronously)'? – 2014-01-05 03:17:04
如果你使用'Result',你会在'AggregateException'包裹任何异常,如果原始任务处于取消状态完成完整的故障。这就是说,通过一些更多的代码来正确处理这些情况,你可以使用不带TaskCompletionSource的'ContinueWith'来制作工作解决方案。 – 2014-01-05 13:52:10