CS0121 Вызов неоднозначен между «Task.Run <TResult>(Func <TResult>)» и «Task.Run (Func <Task>)» - PullRequest
0 голосов
/ 28 февраля 2019

У меня ошибка происходит на 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 голосов
/ 28 февраля 2019

Похоже, что компилятор неправильно определяет тип для 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
...