2010-12-06 68 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 

應該工作

相關問題