c# - 达到限制时在所有线程上停止 Parallel.For 吗?
问题描述
我正在尝试获取用户在其个人资料中发布的所有图像。我使用 API 执行此操作,该 api 最多显示用户发布的 50 条最新帖子。要获得超过 50 个页面,您需要调用第二个页面,每个页面有 50 个,因此如果您想要最后 200 个页面,请运行 4 个页面。
我开始为此使用并行,否则需要很长时间。我要问的问题是,有没有办法完全阻止平行线的每一次互动,因为一旦它达到没有更多图像可以收集的阶段?
正如你从下面看到的,我有一个待办事项。现在我可以摆脱它了,但有些互动比他们需要的更进一步,实际上很多。一旦任何并行部分达到没有更多图像要收集的限制,有没有办法停止所有交互?
public List<TumblrFile> GetImagesForAddress(string pageAddress, string saveLocation)
{
var imageUrls = new List<TumblrFile>();
Parallel.For(0, _pageCount,
index => {
var document = XDocument.Load(GetApiLink(pageAddress, index * 50, true));
var newImages = XmlUtilities.ExtractImagesFromDocument(document, saveLocation);
if (newImages.Count < 1)
{
// TODO: Stop this loop
}
foreach (var newImage in newImages)
{
if (imageUrls.All(x => x.Address != newImage.Address))
{
imageUrls.Add(newImage);
}
}
});
return imageUrls;
}
解决方案
并行有一个重载,看起来像这样
Parallel.For(0, pageCount, (index, loopState) =>
使用它,当你想打破说 loopState.Stop();
推荐阅读
- git - IntelliJ 在合并操作中为一个特定文件重新启动“解决冲突”?
- puppet - 在 centos 6.5 上安装 puppet 的问题
- c# - SignOutAsync 不适用于 asp.net core 2.1 中的 Microsoft 身份验证
- function - 需要帮助将带有参数的函数传递和执行到脚本块中以远程执行它
- java - 如何在 Android App Programmatic 中将 PDF 文件转换为 DOC 文件
- reactjs - 无法创建 React Typescript 应用程序
- .net - 使用powershell向目录NTFS权限添加条件
- python - 如何在 Lasso 和 RobustScalar 之后对回归预测进行逆变换?
- php - 如何构建一个虚拟表,其标题来自其他表的值
- python - 将文件从一个模型的 FileField 复制到另一个模型的 FileField 而不读取它