Func<int, string> func = (int p) =>
{
return p.ToString();
};
Task<string> task = new Task<string>(func, 7);
Ошибка 1 Наиболее подходящий перегруженный метод для System.Threading.Tasks.Task<string>.Task(System.Func<string>, System.Threading.CancellationToken) имеет несколько недопустимых аргументов
Ошибка 2 Аргумент "1": преобразование типа из System.Func<int,string> в System.Func<string> невозможно
Ошибка 3 Аргумент "2": преобразование типа из int в System.Threading.CancellationToken невозможно
Как передать в функцию задания строго типизированный входной параметр типа int?
Состряпаем из вашей функции, принимающей один параметр, функцию без параметров:
static async Task Main(string[] args)
{
Func<int, string> func = (int p) =>
{
return p.ToString();
};
Task<string> task = new Task<string>(() => func(7));
task.Start();
string r = await task;
Console.WriteLine(r);
Console.ReadKey();
}
Т.е. мы здесь определяем еще одну функцию (анонимную), это примерно тоже самое, что написать так:
Func<string> func2 = () => func(7);
Task<string> task = new Task<string>(func2);
Перегрузка с функцией и состоянием имеет следующий вид:
Task<TResult>(Func<Object, TResult>, Object)
Проблема в том, что в Func<Object, TResult> нельзя передать Func<int, string>.( Подробнее можно посмотреть в вопросе: В чем суть ковариантности и контравариантности делегатов?)
Для решения достаточно просто изменить тип делегата, на Func<Object, TResult>
Func<object, string> func = (object p) =>
{
return p.ToString();
};
Task<string> task = new Task<string>(func, 7);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей