gpt4 book ai didi

c# - 如何在Parallel.ForEach中监视进度

转载 作者:行者123 更新时间:2023-12-03 13:19:52 24 4
gpt4 key购买 nike

我正在使用Parallel.ForEach下载500K Urls,并且我想监视每分钟成功下载了多少Urls。我现在在Parallel.ForEach循环中使用lock语句输出每分钟下载的Urls数量:

int elapsedMinutes = 0, cnt = 0;
Parallel.ForEach(list, tuple =>
{
var currMinutes = (int) ((DateTime.Now - startTime).TotalMinutes);
lock (Object)
{
if (currMinutes > elapsedMinutes)
{
elapsedMinutes = currMinutes;
Console.WriteLine("{0}: Extracted {1} urls", DateTime.Now, cnt);
}
}

//download urls ...

Interlocked.Increment(ref cnt);
});

但是我担心锁语句部分会影响性能。还有其他方法可以实现这一目标吗?

最佳答案

无需让每个并行任务与所有其他并行任务进行同步,只需创建一个单独的资源(这里的Timer似乎是最好的工具)就可以每分钟检查一次已完成操作的计数,从而使循环只需要增加一个即可。柜台。

关于c# - 如何在Parallel.ForEach中监视进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26300887/

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