0

我有代码通过两个并行为每个循环发送 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 回答