0

ループごとに2つの並列を介してWebリクエストを送信するコードがあります。このメソッドが発生する前にスレッドを追加すると、これらのタスクの実行に遅延が発生しますか、それともより多くのWeb要求を達成しますか?

            for (int i = 0; i < threads; i++)
            {
                populateClient(ServerID, debugLog, type, mC);
                tasks[i] = Task.Factory.StartNew(() =>
                {
                   testMaps(ServerID, DebugLog, Type, mC.cl, mC.keywords, mC.locations);
                });
            }
            while (tasks.Any(t => !t.IsCompleted)) { } //spin wait

//..。

  static void testMaps(Int64 serverID, String debugLog, String type, ClientInfo cl,
        List<Keyword> keywords,
        List<String> locations)
    {
        Parallel.ForEach(keywords, keyword =>  
        {
            Parallel.ForEach(locations, location =>
           {
           strFileName = file.DownloadString(query);

//.。

4

1 に答える 1

1

あなたのプログラムは大丈夫です。このようなI/Oは、比較的大量の並列処理度で並列実行できるため、明示的にもスルーとしても多くのタスクを起動することParallel.ForEachは問題ではありません。実装は一般的にそれらを適切に管理し、基盤となるスレッドプールに基づいているため、不要なオーバーヘッドを引き起こしません。

于 2012-06-21T08:31:34.567 に答える