C#线程化任务-无法从任务数组中获取返回值
我试图从我的任务中获取返回数据,如果我使用单个变量,它可以正常工作,但是当我使用数组或arraylist时,我看不到任务对象的可用属性方法中的结果接口C#线程化任务-无法从任务数组中获取返回值,c#,multithreading,task,C#,Multithreading,Task,我试图从我的任务中获取返回数据,如果我使用单个变量,它可以正常工作,但是当我使用数组或arraylist时,我看不到任务对象的可用属性方法中的结果接口 var task = Task<BookingListResponse> .Factory.StartNew(() => GetServicesFromApi(sc), TaskCreationOptions.LongRunning); tasks.
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 task=task
.Factory.StartNew(()=>GetServicesFromApi(sc),
TaskCreationOptions.LongRunning);
任务。添加(任务);
尝试
{
//等待所有任务完成。
Task.WaitAll(tasks.ToArray());
}
正如您从代码中看到的,如果我将任务放回数组并键入tasks[1].Result,则它不会公开“Result”,如果我访问任务,则可以获取它
我肯定我在做傻事,所以任何帮助都是好的
干杯
task.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;
}
List tasks=newlist();
//循环方案并仅调用不同的传输api URL
foreach(方案中的方案)
{
if(url.ContainsKey(scheme.url))
继续;
url.Add(scheme.url,0);//添加url。
var sc=新服务标准();
sc.Url=scheme.Url;
sc.电容要求=电容要求;
sc.DropOffLocation=DropOffLocation;
sc.PickUpLocation=PickUpLocation;
sc.皮卡=皮卡;
sc.旅行时间=旅行时间;
//为每个方法调用触发线程。
//tasks.Add(Task.Factory.StartNew(apitributes=>
//GetServicesFromApi(sc),TaskCreationOptions.longlunning);
var task=任务
.Factory.StartNew(()=>GetServicesFromApi(sc),
TaskCreationOptions.LongRunning);
任务。添加(任务);
}
尝试
{
//等待所有任务完成。
Task.WaitAll(tasks.ToArray());
var result=任务[0]。结果;
}
结果选项不显示
干杯
task.Result
或
如果工作正常您需要将任务列表转换为任务 我们也要这样做:
var result = ((Task<BookingListResponse>)tasks[0]).Result;
var result=((任务)任务[0]).result;
我们看不到这一点,因为您尚未粘贴所有相关代码。1) 缺少任务
的声明。2) 您尝试读取结果的位置也丢失了。任务的定义在哪里?您是否以一个任务数组而不是任务数组
结束?是的,我以一个任务数组结束并试图从任务中获得结果,如果我使用我的BO数组,那么我会得到值,但我不确定这是否正确,我还可以使用Task.WaitAll和BooklingListResult数组吗?更好的是:为什么不将任务声明为var tasks=new List()?