由於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