【问题标题】:C# Threaded Tasks - cannot get return value from array of tasksC# Threaded Tasks - 无法从任务数组中获取返回值
【发布时间】:2010-12-06 13:18:18
【问题描述】:

我正在尝试从我的任务中获取返回数据,如果我使用单个 var,它可以正常工作,但是当我使用数组或数组列表时,我在任务的可用属性方法中看不到 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].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) 缺少tasks 的声明。 2)您尝试读取结果的位置也丢失了。
  • tasks的定义在哪里?您是否以Task 数组而不是Task&lt;BooklingListResult&gt; 数组结束?
  • 是的,我结束了一系列任务并尝试从任务中获取结果,如果我使用我的 BO 数组,那么我会得到值,但我不确定那是否是正确,我还能使用 Task.WaitAll 并填充 BooklingListResult 数组吗?

标签: c# multithreading task


【解决方案1】:

您需要将您的任务列表转换为Task&lt;BookingListResponse&gt;...

这样做:

var result = ((Task<BookingListResponse>)tasks[0]).Result;

【讨论】:

  • 更好:为什么不将任务声明为 var tasks = new List>(); ?
【解决方案2】:
task.Result

tasks.First().Result

应该工作

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多