我正在经历非常奇怪的行为,我既无法理解也无法解释。我能够创建一个非常简单的示例来证明这一点。这是在 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();
});
}
}
}
当您只运行该代码而不进行调试时,您会收到预期的结果:两个任务已启动,一个失败,以及控制台中的 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
我正在使用两个任务来证明它们都在重新启动;您可以注释掉一个空的并收到同样令人困惑的结果。
我的问题是 - 这是一个 VS.Net 错误,还是我不理解的某些功能?
有没有办法在这里以“正常”的方式进行调试?