C# CS0121呼叫在';任务。运行<;TResult>;(Func<;TResult>;)&x27;和';Task.Run(Func<;Task>;)&x27;

C# CS0121呼叫在';任务。运行<;TResult>;(Func<;TResult>;)&x27;和';Task.Run(Func<;Task>;)&x27;,c#,visual-studio-2017,C#,Visual Studio 2017,我的错误发生在GetFlowTask=Task.Run(func.Invoke) 其背景如下: public Task<string> GetFlowTask { get; set; } 公共任务GetFlowTask{get;set;} 故障线路位于功能内部: protected void PushTask(Func<string> func) { GetFlowTask = Task.Run(func.Invoke); } protectedvoid P

我的错误发生在
GetFlowTask=Task.Run(func.Invoke)

其背景如下:

public Task<string> GetFlowTask { get; set; }
公共任务GetFlowTask{get;set;}
故障线路位于功能内部:

protected void PushTask(Func<string> func)
{
    GetFlowTask = Task.Run(func.Invoke);
}
protectedvoid PushTask(Func-Func)
{
GetFlowTask=Task.Run(funct.Invoke);
}
直到最近我才发现这个错误(我相信是VS2017更新)

此外,我不知道如何消除这种模糊性。有什么提示吗


为什么Roslyn没有首先选择
Task.Run(Func)

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

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

Fresh Visual Studio 2017很好地编译了您的示例。你能提供一个最小的准备粘贴的例子,再现你这边的问题吗?你能提供一个简单的例子吗?您提供的代码(
public Task GetFlowTask{get;set;}受保护的void PushTask(Func Func){this.GetFlowTask=Task.Run(Func.Invoke);}
)工作正常。因此,您必须有一些其他代码导致此问题。在这里,对于VS2017 15.9.7(和resharper 2018.3.3),我有一个错误。我更新了函数,使其完整。Fresh Visual Studio 2017很好地编译了您的示例。你能提供一个最小的准备粘贴的例子,再现你这边的问题吗?你能提供一个简单的例子吗?您提供的代码(
public Task GetFlowTask{get;set;}受保护的void PushTask(Func Func){this.GetFlowTask=Task.Run(Func.Invoke);}
)工作正常。因此,您必须有一些其他代码导致此问题。在这里,对于VS2017 15.9.7(和resharper 2018.3.3),我有一个错误。我更新了函数,使其完整。