Как вернуть данные из задачи Threading - PullRequest
5 голосов
/ 21 марта 2011

В настоящее время я пытаюсь использовать задачу .net для запуска длинного метода.Мне нужно иметь возможность вернуть данные из задачи.Я хотел бы вызывать этот метод несколько раз каждый раз, когда запускаю его в новой задаче.Однако возврат данных с использованием свойства Task.Result заставляет каждую задачу ждать завершения.

Например, на данный момент, если вы делаете что-то вроде этого:

public void RunTask()
{
   var task = Task.Factory.StartNew(() => 
   { 
      return LongMethod() 
   });  

   Console.WriteLine(task.Result);
}

и вызываете его несколько раз, каждый раз, занимая разное время, он ожидает завершения каждой Задачи, прежде чем выполнитьследующий.

Можно ли вызывать мой метод RunTask несколько раз, каждый раз возвращая результат, не дожидаясь завершения каждой задачи по порядку?

1 Ответ

5 голосов
/ 21 марта 2011

Да. Когда вы вызываете task.Result на Task<T>, он будет блокироваться, пока не будет получен результат.

Если вы хотите сделать это полностью асинхронным, вы можете либо изменить свой метод так, чтобы он возвращал Task<T> напрямую, и «заблокировать» на уровне вызывающего, либо использовать продолжение:

public void RunTask()
{
   var task = Task.Factory.StartNew(() => 
   { 
      return LongMethod() 
   });  

   // This task will run after the first has completed...
   task.ContinueWith( t =>
       {
           Console.WriteLine(t.Result);
       });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...