【发布时间】:2021-02-01 23:55:39
【问题描述】:
我正在尝试将foreach 循环转换为Select 语句,如下所示:
ForEach 循环
List<Task> tasks = new List<Task>();
foreach (var proxyRequest in proxyRequests)
{
tasks.Add(Task.Run(async () =>
{
try
{
Logger.LogInformation($"Request for the enrichment Giact [{message.SalesforceId}] \n {JsonSerializer.Serialize(proxyRequest)}");
var result = await InquiryClient.CreateInquiry(proxyRequest, cancellationToken);
Logger.LogInformation($"Response for the enrichment Giact [{message.SalesforceId}] \n {JsonSerializer.Serialize(result.Result)}");
Response.GiactInquiryResponses.Add(result.Result);
}
catch (Exception ex)
{
Logger.LogError($"Error on requesting the enrichment Giact [{message.SalesforceId}] \n {ex}");
}
}));
}
选择语句:
proxyRequests.Select(x => tasks.Add(Task.Run(async () =>
{
try
{
Logger.LogInformation($"Request for the enrichment Giact [{message.SalesforceId}] \n {JsonSerializer.Serialize(x)}");
var result = await InquiryClient.CreateInquiry(x, cancellationToken);
Logger.LogInformation($"Response for the enrichment Giact [{message.SalesforceId}] \n {JsonSerializer.Serialize(result.Result)}");
Response.GiactInquiryResponses.Add(result.Result);
}
catch (Exception ex)
{
Logger.LogError($"Error on requesting the enrichment Giact [{message.SalesforceId}]\n {ex}");
}
})));
但它给了我 CS0411 错误。我搜索了一下,发现Select 语句需要一个返回值,而foreach 循环更适合做这项工作。
是这样吗?使用Select 语句可以达到相同的结果吗?
【问题讨论】:
-
Select不是foreach的替代品,也不应该作为一个替代品使用。仅举一个例子,您的Select语句代码不会运行任何Add方法。
标签: c# linq async-await