アイテムが並行して処理されている ConcurrentBagurlsがあります (コレクションには何も書き戻されていません)。
         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)
            {
            }
        });