gpt4 book ai didi

c# - 使用 Task.FromResult 将 Task 隐式转换为 Task 其中 T : X?

转载 作者:行者123 更新时间:2023-12-04 00:12:54 26 4
gpt4 key购买 nike

Task<IDictionary<double, double>> GetTaskDict()
{
return Task.FromResult(new Dictionary<double, double> () );
}

此代码无法编译,因为我们无法在 Task > 到 Task > 之间进行转换。为什么这不起作用,是否可以使这种类型的调用起作用?这与这样的编译方法相反

IDictionary<double, double> GetTaskDict()
{
return new Dictionary<double, double> ();
}

最佳答案

return Task.FromResult<IDictionary<double, double>>(new Dictionary<double, double>());

这是因为 Task<T>不是协变的,所以 Task<Foo>不能与 Task<IFoo> 互换即使Foo : IFoo .

您不妨考虑使用ValueTask<T>如果您要获得大量同步可用的结果-在这种情况下要便宜得多。你甚至可以使用隐含的 new()在那种情况下的用法:

ValueTask<IDictionary<double, double>> GetTaskDict()
{
return new(new Dictionary<double, double>());
}

(这里,new(...) 从方法声明的返回类型解释为 new ValueTask<IDictionary<double, double>>(...))

关于c# - 使用 Task.FromResult 将 Task<T> 隐式转换为 Task<X> 其中 T : X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67061611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com