gpt4 book ai didi

c# - 从 Parallel.For 获取结果

转载 作者:太空狗 更新时间:2023-10-30 01:26:27 24 4
gpt4 key购买 nike

我正在考虑使用 Parallel.For 调用需要一段时间才能返回的 Web 服务,但是,我们知道我们可以同时调用它很多次,而且不需要那么多时间比一个电话还长。

为此,我正在试用 Parallel.For,我真的很想检查一下我的想法,看看它是如何工作的。我可能有点过于谨慎了,因为我不想搞砸应用程序,而且我想确保如果我们走这条路,整个应用程序团队都知道在访问并行代码时需要做什么。

无论如何,这是我目前的工作和理解。

public IEnumerable<HotelAvail> GetAvailability (IList<string> codes, DateTime startDate, int numNights)
{
HotelAvail[] result = new HotelAvail[codes.Count];

Parallel.For(0, codes.Count, i =>
{
string code = codes[i];
result[i] = new AvailService().
GetAvailability(
code, startDate, numNights);
});

return result;
}

AvailService 获取指定日期范围内的房间可用性(startDate + numNights)。 code 是属性的标识符。

我在开始时设置了一个正确大小的结果数组,其中有很多空槽。

然后我并行调用该服务。该服务创建了一个新的 HotelAvail 对象,我将它放在数组中的正确位置。

当一切都完成后,我返回数组。此时应该已完全填充。不应有空格。该服务不会影响系统状态的任何其他部分 - 它只是构建一个 Web 服务调用、调用它并返回一个结果对象。

是否有任何我没有发现的问题。

就像我上面说的,我可能过于谨慎了,但我在更年轻和精力充沛的日子里被编写多线程代码所困扰,我不想再犯同样的错误。

此外,此代码最终将出现在 ASP.NET 应用程序中。我依稀记得它对多线程代码有很多提示。我可能会在那里遇到任何其他问题吗?

最佳答案

在我看来还不错,但我认为 PLINQ 会更优雅一些:

    public IEnumerable<HotelAvail> GetAvailability (IList<string> codes, 
DateTime startDate,
int numNights)
{
return codes.AsParallel().AsOrdered().Select(code =>
new AvailService().GetAvailability(code, startDate, numNights))
.ToList();
}

关于c# - 从 Parallel.For 获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4923231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com