首页 > 解决方案 > CS0121 'Task.Run 之间的调用不明确(功能)' 和 '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 更新)。

此外,我不知道如何消除歧义。有什么提示吗?

为什么 Roslyn 不Task.Run<TResult>(Func<TResult>)首先选择?

标签: c#visual-studio-2017

解决方案


似乎编译器没有正确推断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

推荐阅读