c# - 我如何在 Visual Studio 中将多线程应用程序调试为单线程

标签 c# multithreading visual-studio

如果我想一个任务一个任务调试怎么办:

static void Main()
{
    var numbers = Enumerable.Range(0, 10);
    var tasks = new List<Task>();
    foreach (var number in numbers)
    {
        var task = Task.Factory.StartNew(n =>
            {
                var data = LongLoadOperation(n);           // 1.
                var calculation = Calculate(data);         // 2.
                var result = BuildNiceResult(calculation); // 3.
                return result;
            }, number);
            tasks.Add(task);
    }
    Task.WaitAll(tasks.ToArray());
    Console.WriteLine("Done");
}

我不想从一个任务切换到另一个任务。调试这段代码不是很舒服。

最佳答案

令人惊讶的是,还没有人提到这一点……但也许您应该看一下“线程”窗口或“并行任务”窗口(在调试 -> Windows 中找到)。这些可能有助于调试多线程代码。如果您想逐个执行每个任务,请在任务开始处设置一个断点。每当您在每个任务上遇到该断点时,转到其中一个窗口,右键单击您正在执行的线程/任务,然后选择“卡住”它的选项。这将阻止线程自行执行。您可以使用线程/并行任务窗口在当前执行/卡住的各种任务之间切换。如果您想逐步完成其中一项任务,您可以在准备就绪时“解冻”它。实际上,您可以使用这些窗口来重新创建一些罕见的竞争条件场景。

关于c# - 我如何在 Visual Studio 中将多线程应用程序调试为单线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605629/

相关文章:

visual-studio - 尝试构建项目时如何修复 'Schema validation error'?

c# - UWP : PRI277: 0xdef00532 - Conflicting values for resource ''

c# - 拿电脑 "performance snapshot"

c# - 计算 Windows Mobile/CE 设备上的当前 CPU 使用率

java - `JNI_OnLoad` 是否总是在主线程中调用?

java - 返回值的可运行替代方案

c# - 在 Visual Studio 2010 中自动格式化 lambda 函数

c# - 将模型与 View 模型分开有什么意义? (MVVM)

c# - 继承与接口(interface)隔离原则

java - 在 ExecutorService 的 newFixedThreadPool() 中使用队列?