Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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#_Async Await_Task - Fatal编程技术网

C# 返回多个异步任务时,我如何知道哪些结果来自哪个任务?

C# 返回多个异步任务时,我如何知道哪些结果来自哪个任务?,c#,async-await,task,C#,Async Await,Task,我有以下代码来运行多个异步任务并等待所有结果 string[] personStoreNames = _faceStoreRepo.GetPersonStoreNames(); IEnumerable<Task<IdentifyResult[]>> identifyFaceTasks = personStoreNames.Select(storename => _faceServiceClient.IdentifyAsync(storenam

我有以下代码来运行多个异步任务并等待所有结果

string[] personStoreNames = _faceStoreRepo.GetPersonStoreNames();    
IEnumerable<Task<IdentifyResult[]>> identifyFaceTasks =
        personStoreNames.Select(storename => _faceServiceClient.IdentifyAsync(storename, faceIds, 1));
      var recognitionresults =
        await Task.WhenAll(identifyFaceTasks);
string[]personStoreNames=\u faceStoreRepo.GetPersonStoreNames();
IEnumerable identifications=
personStoreNames.Select(storename=>\u faceServiceClient.identifySync(storename,faceIds,1));
var识别结果=
等待任务。WhenAll(identificationFaceTasks);

当我得到结果时,如何才能得到每个任务结果的storename。IdentificationResult的每个数组都将用于特定的storename,但我不确定如何最终得到我的IdentificationResults以及它们所在的storename。

正如MSDN所说,使用相同的索引来获得用于参数的结果

如果没有任何任务出现故障,也没有任何任务被取消,则生成的任务将以TaskStatus.RanToCompletion状态结束。返回任务的结果将被设置为一个数组,该数组包含所提供任务的所有结果,其顺序与所提供的相同(例如,如果输入任务数组包含t1、t2、t3,则输出任务的结果将返回一个TResult[],其中arr[0]==t1.Result、arr[1]==t2.Result和arr[2]==t3.Result)


这不是对这个问题的直接回答,但您可以使用Microsoft的反应式框架使代码更整洁

你可以这样写:

var query =
    from sn in _faceStoreRepo.GetPersonStoreNames().ToObservable()
    from irs in Observable.FromAsync(() => _faceServiceClient.IdentifyAsync(sn, faceIds, 1))
    select new { sn, irs };

var result = await query.ToArray();
result
new{sn,irs}
的匿名变量数组

一个优点是,您可以在值可用时对其进行处理:

var result = await query
    .Do(x => { /* process each `x.sn` & `x.irs` pair as they arrive */ })
    .ToArray();

您可能已经知道如何获得所有结果。。。现在你到底不知道什么?嗨,阿列克谢,我可以很好地得到结果,这就是这个链接所显示的。但有了结果集,我如何知道哪些结果来自哪个storename?我不确定您是否在搜索结果中看到指向文档的链接,可能没有-因此我将其粘贴为答案。