C # Threaded Tasks - не может получить возвращаемое значение из массива задач - PullRequest
4 голосов
/ 06 декабря 2010

Я пытаюсь получить возвращаемые данные из моей задачи, все работает нормально, если я использую одну переменную, но когда я использую массив или массив, я не вижу интерфейс для RESULT в доступных свойствах методов задачи объект.

var task = Task<BookingListResponse>
           .Factory.StartNew(() => GetServicesFromApi(sc),
                             TaskCreationOptions.LongRunning);
tasks.Add(task);
try
{
   // Wait for all the tasks to finish.
   Task.WaitAll(tasks.ToArray());
}

Как вы можете видеть из кода, если я помещаю задачи обратно в массив и набираю задачи [1]. В результате не выдается «результат», если я получаю доступ к задаче, я могу ее получить.

Я уверен, что делаю что-то глупое, поэтому любая помощь будет хорошей.

веселит.

Paul.


вот полный код:

List<Task> tasks = new List<Task>();

// loop schemes and only call DISTINCT transit api URL's
foreach (Scheme scheme in schemes)
{
   if (url.ContainsKey(scheme.Url))
      continue;

   url.Add(scheme.Url, 0); // add url.

   var sc = new ServiceCriteria();
   sc.Url = scheme.Url;
   sc.CapacityRequirement = capacityRequirement;
   sc.DropOffLocation = dropOffLocation;
   sc.PickUpLocation = pickUpLocation;
   sc.PickUp = pickup;
   sc.TravelTime = travelTime;

   // Fire off thread for each method call.
   //tasks.Add(Task<BookingListResponse>.Factory.StartNew(apiAttributes =>
   //            GetServicesFromApi(sc), TaskCreationOptions.LongRunning));

   var task = Task<BookingListResponse>
                 .Factory.StartNew(() => GetServicesFromApi(sc), 
                                   TaskCreationOptions.LongRunning);
   tasks.Add(task);

}


try
{
   // Wait for all the tasks to finish.
   Task.WaitAll(tasks.ToArray());
   var result = tasks[0].Result;
}

опция результата не отображается.

веселит.

Ответы [ 2 ]

10 голосов
/ 06 декабря 2010

Вам необходимо преобразовать свой список задач в Task<BookingListResponse> ...

. Так же:

0 голосов
/ 06 декабря 2010
task.Result

или

tasks.First().Result

должно работать

...