CS0121调用在'Task.Run <tresult>(Func <tresult>)'和'Task.Run(Func <task>)'

时间:2019-02-27 23:36:37

标签: c# visual-studio-2017

我在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>)

1 个答案:

答案 0 :(得分:2)

似乎编译器无法正确推断作为参数传递的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