从linq语句中选择await

jaz*_*000 3 c# linq async-await .net-core

看来应该很简单,我有以下代码

var additionalInformation=   response.AdditionalInformation.Select( async x =>  new AdditionalInformationItem
                {
                    StatementCode = x?.StatementCode?.Value,
                    LimitDateTime = x?.LimitDateTime?.Item?.Value,
                    StatementTypeCode = x?.StatementTypeCode?.Value,
                    StatementDescription = x?.StatementDescription?.Value,
                    AdditionalInformationResult = await BuildAdditionalInformationPointers(x)


                }).ToList();
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现的是额外的信息类型

List<AdditionalInformationItem>
Run Code Online (Sandbox Code Playgroud)

,我得到的是 List<Task<AdditionalInformationItem>>

谁能帮助我正确地重新陈述我的陈述?

Lia*_*iam 5

您需要使用来展开任务,await Task.WhenAll(additionalInformation)然后使用来访问实际结果additionalInformation[0].Result

所以像这样:

var additionalInformation=   response.AdditionalInformation.Select( async x =>  new AdditionalInformationItem
                {
                    StatementCode = x?.StatementCode?.Value,
                    LimitDateTime = x?.LimitDateTime?.Item?.Value,
                    StatementTypeCode = x?.StatementTypeCode?.Value,
                    StatementDescription = x?.StatementDescription?.Value,
                    AdditionalInformationResult = await BuildAdditionalInformationPointers(x)


                });

await Task.WhenAll(additionalInformation);
//This will iterate the results so may not be the most efficient method if you have a lot of results
List<AdditionalInformationItem> unwrapped = additionalInformation.Select(s => s.Result).ToList();
Run Code Online (Sandbox Code Playgroud)