CS0121'Task.Run之间的调用不明确 (Func键 )'和'Task.Run(Func )”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CS0121'Task.Run之间的调用不明确 (Func键 )'和'Task.Run(Func )”相关的知识,希望对你有一定的参考价值。

我在GetFlowTask = Task.Run(func.Invoke);发生了错误。

他的背景如下:

public Task<string> GetFlowTask { get; set; }

故障线在一个函数内:

protected void PushTask(Func<string> func)
{
    GetFlowTask = Task.Run(func.Invoke);
}

直到最近我才发现这个错误(我相信VS 2017更新)。

此外,我不知道如何解除模棱两可。任何提示?

罗斯林为什么不首先选择Task.Run<TResult>(Func<TResult>)

答案

似乎编译器没有正确推断作为参数传递的func.Invoke的类型。

GetFlowTask = Task.Run(func.Invoke);
//Fails in 15.9.7 (but works in LINQPad v5.36.03)

但是有一些简单的选择。

GetFlowTask = Task.Run(func); //Succeeds
GetFlowTask = Task.Run(() => func.Invoke()); //Succeeds

以上是关于CS0121'Task.Run之间的调用不明确 (Func键 )'和'Task.Run(Func )”的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用 Task.Run 还是 Task.FromResult?

将异步委托传递给Task.Run? [复制]

Xamarin Android - Task.Run vs Task.Factory.StartNew和Thread.CurrentPrincipal

Task.Run(()=> DoWorkAsync()) 和 new Thread(async()=> DoWorkAsync()); 的区别

为啥不调用 Task<T>.Result 死锁?

Task.Run() 与创建 Task 实例然后 Start() 一样吗?