将Parallel.ForEach与List一起使用会抛出AggregateException

时间:2017-09-07 08:27:51

标签: c# list exception aggregate parallel.foreach

Windows窗体应用程序 我得到了一个包含对象的列表,并希望为此列表中的每个对象调用一个函数。每个函数都应该在一个线程中完成。只有3个线程应同时最大活动。当一个线程完成后,下一个线程应该开始,直到处理列表中的所有对象。

我尝试使用\\\",但得到了AggregateException(s)。你能告诉我为什么抛出异常吗?

列出我的对象:Parallel.ForEach>> ZuInstallierendeAssetsList

这是我的代码:

List<vw_AC_FilteredPrinters2> ZuInstallierendeAssetsList

这是要调用的函数:

        var options = new ParallelOptions { MaxDegreeOfParallelism = 3 };
        int index = 0;

        var exceptions = new ConcurrentQueue<Exception>();

        Parallel.ForEach(ZuInstallierendeAssetsList, options,
                (OneObject) =>
                {
                    try
                    {
                        index++;                    
                        test(OneObject.FIRSTNAME, index);
                    }
                    catch (Exception ex) { exceptions.Enqueue(ex); }
                });

        if (exceptions.Count > 0) throw new AggregateException(exceptions);

处理列表的某些对象,具体取决于函数执行的时间。当我使用private void test (string _prt, int _index) { //Thread.Sleep(1000); this.listBox_Console.Items.Add("DataInObject:" + _prt + ", " + _index); } 时,在抛出异常之前,将从列表中处理2个对象。如果没有Thread.Sleep,则会在抛出异常之前处理12个对象。该列表包含大约500个对象。

0 个答案:

没有答案