![](/img/trans.png)
[英]Using Task.FromResult to implicitly convert a Task<T> to a Task<X> where T : X?
[英]Compiler error while returning Task.FromResult(MyInterface): cannot implicitly convert types
我有两个函数,每个函数返回一个实现接口MyInterface
的ActualObject
实例:
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()
都返回完全相同的 object,只是有两个不同的实现。
第一种方法会给出编译器错误:无法从ActualObject
隐式转换为MyInterface
,而第二种方法编译正常。 这是为什么?
Task.FromResult(obj)
使用类型推断来推断您的意思是Task.FromResult<ActualObject>(obj)
,然后无法将该任务类型转换为基于接口的任务类型。 ( Task<T>
是不变的。)
要解决此问题,您只需为调用FromResult
指定泛型类型参数:
return Task.FromResult<MyInterface>(obj);
(或者您可以将obj
声明为MyInterface
类型...)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.