Я пытаюсь запустить задачу в C#, которая принимает параметр и возвращает значение, но я не могу получить синтаксис правильно.Как запустить задачу, которая принимает параметр и возвращает значение?
Вот как близко, как я получил: вот задача, которая, как ожидается, вернет int. Я моя лямбда, я также показывать его принимать один параметр, о:
Task<int> task1 = Task.Factory.StartNew<int>((o) => { return 2 ; }, 3);
Console.WriteLine(task1.Result); // prints 2
выше линия работает (она возвращает жёстко прописанное значение 2, но вы можете видеть, что это не делает ничего с параметром а , что делает его бесполезным Если я что-то сделать с параметром а, как это:.
Task<int> task1 = Task.Factory.StartNew<int>((o) => { return (2 * o) ; }, 3);
я получаю сообщение, что синтаксис делегат «System.Func» не принимает 1 аргументы
Любая помощь в том, как. для достижения обеих вещей (передать параметр и получить значение) из задачи будет отлично!
Итак, вы говорите, что не указываете параметры лямбда .. правильно? Другими словами, вместо (o) => ..do что-то с o объявить временным для хранения o вне самой задачи, а затем просто использовать() => ..do что-то с o –
'task' class принимает делегат Func, который либо не получает никаких параметров, а возвращает T, или принимает и возвращает объект, и возвращает T. вы, вероятно, можете использовать перегрузку объекта, как описано в msdn, но для этого нет причин. Любой анонимный/лямбда-делегат, который вы пишете в .net, также имеет доступ к переменным области, определяемой им, как вы можете видеть в ссылке, которую я предоставил/ответил Николас Батлерс. Вам не нужно указывать параметры в лямбда, yup. –
YavgenyP