Scott在他的博客上给出的在.NET 6中使用Parallel.ForEachAsync的示例将MaxDegreeOfParallelism的值指定为3。
但是,如果未指定,则默认MaxDegreeOfParallelism为ProcessorCount。这对于CPU绑定工作来说是有意义的,但是对于异步I/O绑定工作,对于默认值来说,这似乎是一个糟糕的选择。
如果我正在执行以下斯科特示例中的一些操作,但我希望尽可能快地这样做,我应该如何确定使用MaxDegreeOfParallelism的最佳值?将其指定为int.MaxValue并假设TaskScheduler在调度ThreadPool上的工作时会做最明智的事情,这是否合理?
ParallelOptions parallelOptions = new()
{
MaxDegreeOfParallelism = 3
};
await Parallel.ForEachAsync(userHandlers, parallelOptions, async (uri, token) =>
{
var user = await client.GetFromJsonAsync<GitHubUser>(uri, token);
Console.WriteLine($"Name: {user.Name}\nBio: {user.Bio}\n");
});发布于 2022-03-31 00:18:38
得到is...testing号码的唯一方法。
关于http工作,涉及两个方面:
对于遥控器来说,你的速度可能太快了。这可能是因为资源和/或节流。
注意:缺省值
缺省值--这将导致ProcessorCount --将取决于代码运行的机器,如果您在云中运行代码,则这个数字可能与您健壮的笔记本上的不同。
这可能导致非prod环境和prod环境之间的意外差异。
GitHub特异性
gitHub.com为非企业用户提供了每小时5,000个请求(来自这里),还有这。
为了在GitHub上提供高质量的服务,在使用该API时,可能会对某些操作适用附加的速率限制。例如,使用API快速创建内容、积极地轮询而不是使用web挂钩、发出多个并发请求或反复请求计算成本高的数据,可能会导致二级速率限制。
在集成商的最佳做法中我们可以阅读
处理二级利率限制 二级利率限制是另一种方法,我们确保API的可用性。为了避免达到这个限制,您应该确保您的应用程序遵循下面的指导方针。
https://stackoverflow.com/questions/71684948
复制相似问题