Parallel.ForEach中的异常日志

时间:2018-09-13 08:48:44

标签: c# parallel.foreach

我尝试了以下代码

import matplotlib.pyplot as plt
selected={"Husain":92, "Asim":65,"Chirag": 74 }
rejected={"Absar":70,"premraj":57}     
selected_candidates_number = len(selected)
rejected_candidates_number = len(rejected)
plt.bar(range(selected_candidates_number ),list(selected.values()),color="green")
plt.bar(range(selected_candidates_number,selected_candidates_number +rejected_candidates_number ),list(rejected.values()),color="red")
plt.xticks(range(selected_candidates_number +rejected_candidates_number), list(selected.keys()) + list(rejected.keys()))
plt.xlabel("Candidates")
plt.ylabel("Score")
plt.plot()
plt.show()

PrintEven方法的“ catch”块不会打印所有的奇数。这意味着catch块的Console.Writeline并不总是执行。

当我从PrintEven方法的“ catch”块中删除“ throw”时,代码将打印所有奇数。

问题:

  1. 为什么从catch块引发异常会导致这种不一致?
  2. 如何在catch块中记录一些其他信息并引发异常?

TIA。

1 个答案:

答案 0 :(得分:0)

实际上,您的代码可以正常工作,因为并行将使进程在多个线程中运行,而不会破坏主线程并停止整个过程。您可能会发现的唯一问题是订单将被随机化。 1.根据我的理解,不应在catch内引发异常。原因是,如果没有try catch块来处理您放入catch中的抛出,则整个程序将崩溃。 2.异常类内部有很多属性,例如CallStack和InnerException,它们将帮助您更深入地识别错误。如果要记录日志,可以使用很多nuget软件包,其中一个著名的例子是NLog。