Почему вызов неоднозначен между Task.Run(Func) и Task.Run(Func) при передаче имени методаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему вызов неоднозначен между Task.Run(Func) и Task.Run(Func) при передаче имени метода

Сообщение Anonymous »

Я пытаюсь запустить несколько неасинхронных методов одновременно, как показано ниже. Все функции определены в том же классе, что и функции-члены.

Код: Выделить всё

private string getEstimatedWaypointStart()
{
return "id-1";
}

private string getEstimatedWaypointEnd()
{
return "id-2";
}

private void postVector()
{
//These don't compile
Task t1 = Task.Run(getEstimatedWaypointStart);
Task t2 = Task.Run(getEstimatedWaypointEnd);
//These works fine
Task t3 = Task.Run((Func)getEstimatedWaypointStart);
Task t4 = Task.Run(() => getEstimatedWaypointEnd());

/*do stuff*/
}
Однако при попытке построить код я получаю неожиданную ошибку с сообщением о неоднозначности:

Код: Выделить всё

CS0121
The call is ambiguous between the following methods or properties: 'Task.Run(Func)' and 'Task.Run(Func)'
Я нашел в этом посте очень похожую ситуацию. Однако в этом посте делегат не был двусмысленным после удаления ненужного вызова, поскольку его тип определен в параметре метода. Я считаю, что это та же самая причина, по которой актерский состав () решает мою проблему. Но не в моем случае, поскольку функции просто определены в одном классе.
Я не ищу обходного пути, поскольку лямбда-выражение работает нормально. Мне любопытно, есть ли объяснение такого поведения: почему компилятор видит делегата как Func, когда ключевое слово async вообще не используется? Это ошибка в моей текущей довольно старой версии C# (C# 7.3) или это ожидаемо? Если позже, стоит ли мне просто придерживаться лямбда-выражения?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -task-runf
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»