1

アイテムが並行して処理されている 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)
            {

            }

        });
4

1 に答える 1