問題 §
OS, SDKともにWindows10のアニバーサリーアップデートしたところ、Parallel.ForEachで数万件単位の大量の処理を並列動作させていた処理がVisual Studioの出力ウィンドウに以下のような例外情報(一部を抜粋)を出して正常に動作しない。(処理中に途中から出るようになる)
EventSource Error: EventSourceException while processing event "TraceOperationEnd"
EventSource Error: EventSourceException while processing event "TraceSynchronousWorkEnd"
EventSource Error: EventSourceException while processing event "TraceOperationBegin"
EventSource Error: EventSourceException while processing event "TraceSynchronousWorkEnd"
EventSource Error: EventSourceException while processing event "TraceOperationBegin"
EventSource Error: EventSourceException while processing event "TraceSynchronousWorkBegin"
EventSource Error: EventSourceException while processing event "RunningContinuation"
原因 §
不明。ただし、MaxDegreeOfParallelismに正の値を指定すると問題がなかった。-1を指定するかあるいは全く指定しない場合はNG。
対応 §
MaxDegreeOfParallelismにEnvironment.ProcessorCountの値を設定して回避した。
正常に動かないケース §
await Task.Run(() =>
{
Parallel.ForEach(source, (src) =>
{
body(src).Wait();
});
});
動いたケース §
await Task.Run(() =>
{
var opt = new ParallelOptions();
opt.MaxDegreeOfParallelism = Environment.ProcessorCount;
Parallel.ForEach(source, opt, (src) =>
{
body(src).Wait();
});
});
感想 §
「未確認だが、アニバーサリーアップデートのSDKは互換度が低く、他にも引っかかっているソフトがあるらしい」
「初物はそんなもので、徐々にこなれて安定していくのではないの?」
「そうだろうと思うが目の前のOSで自作ソフトがちゃんと動かないことも困る」