2010-12-06 35 views
4

我试图从我的任务中获取返回数据,它工作正常,如果我使用单个变量,但是当我使用数组或列表时,我看不到任务对象的可用属性方法中RESULT的接口。C#线程任务 - 无法从任务数组获取返回值

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

结果选项不显示。

欢呼声。

+1

我们可以”你真的看不到,你没有粘贴所有相关的代码。 1)缺少“任务”声明。 2)你尝试阅读的结果也是缺失的。 – 2010-12-06 13:22:46

+1

`tasks`的定义在哪里?你是否结束了一个`Task`而不是`Task `数组? – 2010-12-06 13:24:13

回答

10

你需要投你的任务列表插入Task<BookingListResponse> ...

所以做:

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

tasks.First().Result 

应该工作