Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#线程化任务-无法从任务数组中获取返回值_C#_Multithreading_Task - Fatal编程技术网

C#线程化任务-无法从任务数组中获取返回值

C#线程化任务-无法从任务数组中获取返回值,c#,multithreading,task,C#,Multithreading,Task,我试图从我的任务中获取返回数据,如果我使用单个变量,它可以正常工作,但是当我使用数组或arraylist时,我看不到任务对象的可用属性方法中的结果接口 var task = Task<BookingListResponse> .Factory.StartNew(() => GetServicesFromApi(sc), TaskCreationOptions.LongRunning); tasks.

我试图从我的任务中获取返回数据,如果我使用单个变量,它可以正常工作,但是当我使用数组或arraylist时,我看不到任务对象的可用属性方法中的结果接口

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()?