我试图从我的任务中获取返回数据,如果我使用单个var,它可以正常工作,但是当我使用数组或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());
}
从代码中可以看出,如果我把任务放回到一个数组中并输入任务[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;
}
结果选项未显示。
欢呼声。
答案 0 :(得分:10)
您需要将任务列表转换为Task<BookingListResponse>
...
所以:
var result = ((Task<BookingListResponse>)tasks[0]).Result;
答案 1 :(得分:0)
task.Result
或
tasks.First().Result
应该有效