我有兩個函式,每個函式都回傳一個ActualObject實體,實作介面MyInterface:
public class ActualObject : MyInterface
{
...
}
Task<MyInterface> GetObjectAsync()
{
ActualObject obj = GetObjectInternal();
return Task.FromResult(obj);
}
async Task<MyInterface> GetObjectAsync()
{
ActualObject obj = await GetObjectInternalAsync();
return obj;
}
GetObjectInternal()并且GetObjectInternalAsync()都回傳完全相同的物件,只是有兩個不同的實作。
第一種方法會給出編譯器錯誤:不能隱式轉換 from ActualObjectto MyInterface,而第二種方法編譯得很好。這是為什么?
uj5u.com熱心網友回復:
Task.FromResult(obj)使用型別推斷來推斷您的意思Task.FromResult<ActualObject>(obj),然后無法將該任務型別轉換為基于介面的任務型別。(Task<T>是不變的。)
要解決此問題,您只需指定呼叫的泛型型別引數FromResult:
return Task.FromResult<MyInterface>(obj);
(或者你可以宣告obj為型別MyInterface......)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513487.html
標籤:C#异步异步等待界面
