理解も説明もできない、本当に奇妙な行動を経験しています。それを実証するための非常に単純なサンプルを作成することができました。これは、VS.Net 2013 および 2015 で、複数のターゲット .Net バージョンを持つ異なるマシンで再現されました。
using System;
using System.Linq;
namespace Sample
{
internal static class Program
{
private static void Main(string[] args)
{
ExecuteInParallel(new[]
{
new Tuple<string, Action>("Task1", () => { }),
new Tuple<string, Action>("Task2", () => { throw new Exception("Exception"); })
});
}
private static void ExecuteInParallel(Tuple<string, Action>[] tasks)
{
tasks.AsParallel().ForAll(x =>
{
Console.WriteLine("Starting " + x.Item1);
x.Item2();
});
}
}
}
デバッグせずにそのコードを実行すると、期待どおりの結果が得られます: 2 つのタスクが開始され、1 つが失敗し、AggregateException の詳細がコンソールに表示されます。
Starting Task1
Starting Task2
Unhandled Exception: System.AggregateException: One or more errors occurred. ---> System.Exception: Exception
at Sample.Program.<Main>b__1() in d:\temp\ConsoleApplication40\ConsoleApplication40\Program.cs:line 13
...
しかし、デバッグで同じコードを開始すると、結果は非常に奇妙なものになります。まず、AggregateException を受け取ります。
ただし、[続行] をクリックすると、両方のタスクが何度も開始されます。コンソールからのサンプル出力は次のとおりです。
Starting Task1
Starting Task2
Starting Task1
Starting Task2
Starting Task1
Starting Task2
Starting Task1
Starting Task2
2 つのタスクを使用して、両方が再起動していることを示していました。空のものをコメントアウトして、同じ紛らわしい結果を受け取ることができます。
ここで私の質問 - これは VS.Net のバグですか、それとも私が理解できない機能ですか?
ここで「通常の」方法でデバッグする方法はありますか?