C#多线程任务-无法从任务数组中获取返回值

5

我正在尝试获取任务的返回数据,如果我使用单个变量,它可以正常工作,但是当我使用数组或ArrayList时,在任务对象的可用属性方法中看不到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());
}

从代码中可以看出,如果我将任务放回数组并键入tasks [1] .Result,则不会暴露“result”,如果我访问任务,则可以获取它。

我确定我做了一些傻事,所以任何帮助都会很好。

干杯。

保罗。


这是完整的代码:

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;
}

结果选项未显示。
祝好。

1
我们无法真正看到它,因为您没有粘贴所有相关的代码。1)缺少“tasks”的声明。2)您尝试读取结果的位置也不明确。 - Albin Sunnanbo
1
“tasks”的定义在哪里?你最终得到的是一个Task数组,而不是一个Task<BooklingListResult>数组吗? - Damien_The_Unbeliever
是的,我最终得到了一个任务数组,并尝试从任务中获取结果。如果我使用我的BO(Business Object)数组,我可以得到值,但我不确定是否正确。我是否仍然可以使用Task.WaitAll,BooklingListResult数组将被填充? - Randof LoveBottom
2个回答

10
你需要将任务列表转换为 Task<BookingListResponse>。因此,请执行以下操作:
var result = ((Task<BookingListResponse>)tasks[0]).Result;

1
更好的做法是:为什么不将任务声明为 var tasks = new List<Task<BookingListResponse>>();? - Kris Vandermotten

-1
task.Result

或者

tasks.First().Result

应该可以工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接