CS0121 调用在"Task.Run(<TResult>Func<TResult>)"和"Task.Run(Func<Task>)"之间不明确



我有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

最新更新