我有一个 ConcurrentBag urls
,其项目正在并行处理(没有任何内容被写回集合):
urls.AsParallel<UrlInfo>().WithDegreeOfParallelism(17).ForAll( item =>
UrlInfo info = MakeSynchronousWebRequest(item);
(myProgress as IProgress<UrlInfo>).Report(info);
});
我在 Web 请求中将超时设置为 30 秒。当遇到响应非常慢的 url 时,所有并行处理都会停止。这是预期的行为,还是我应该在我的代码中寻找一些问题?
这是进展:
myProgress = new Progress<UrlInfo>( info =>
{
Action action = () =>
{
Interlocked.Increment(ref itested);
if (info.status == UrlInfo.UrlStatusCode.dead)
{
Interlocked.Increment(ref idead);
this.BadUrls.Add(info);
}
dead.Content = idead.ToString();
tested.Content = itested.ToString();
};
try
{
Dispatcher.BeginInvoke(action);
}
catch (Exception ex)
{
}
});