Я использую класс Task в C# и хочу передать предопределенный метод, который возвращает значение и не использует lambdas для метода Task.Run
.Task.Run Неоднозначные перегрузки параметров
Вот консольное приложение с кодом:
static int ThreadMethod()
{
return 42;
}
static void Main(string[] args)
{
Task<int> t = Task.Run(function:ThreadMethod);
WriteLine(t.Result);
}
Однако она возвращается сообщение об ошибке:
The call is ambiguous between the following methods or properties: 'Task.Run<TResult>(Func<TResult>)' and 'Task.Run(Func<Task>)'
Я пытался делать это, чтобы исправить это и получили мой ожидаемый результат:
Task<int> t = Task.Run((Func<int>)ThreadMethod);
Однако, я не уверен, что я делаю это правильно или есть лучшее решение?
Func and Action - это просто делегаты. у них нет только названия;). Вместо этого используйте лямбда. они анонимные делегаты кстати. '() => ThreadMethod()' –
некоторыми трюками, если вы не хотите использовать лямбду по любой причине. вы можете это сделать. 'Task.Run (function: ThreadMethod)'. но вы должны изменить свою подпись метода на это. 'static async Задача ThreadMethod()'. это бессмысленно, но оно компилируется. –
whoah часть 'async' сделала это более запутанным. Извините, я все еще нооб в многозадачности и асинхронном программировании на C# –