使用VS2015调试器,如何在特定上下文中访问所有任务的列表?例如,在下面的SAMPLE中,我希望看到有两个任务:"测试"和" TestAsync"。到目前为止,我只能看到第一个 - 我无法从异步方法中看到隐式任务。
已于6/9/16更新
"并行堆栈"和"任务" VS2015中的窗口是一种简单的方法,但是有一个未记录的限制阻止它们在Windows 7中工作(我正在使用它)。
在Windows 7中,他们只会列出明确创建的"任务"对象。例如,在下面的SAMPLE中,当我期待两个任务时,我可以看到一个用于"测试"的任务("测试"和" TestAsync")
根据MSDN Using the Tasks Window:
在托管代码中,您可以在使用System.Threading.Tasks.Task对象或使用await和async关键字时使用“任务”窗口
但是,在Windows 7中,它不能与async / await一起使用。这在VS2013 Debug/Windows/Tasks: "No tasks to display"中得到了进一步强化,这表明这是一个操作系统问题,如果我运行的是Windows 8.1或更高版本,它就会起作用。我还没有在Windows 10中测试过。
如果我不能使用" Parallel Stacks",是否有一些管理器对象我可以检查以获得可枚举的任务列表?
例如,如果在WPF应用程序的异步方法中放置断点,并查看callstack,则可能会看到
我已经尝试过检查"任务t2"对象,但尚未找到任何有用的东西。例如。 - Task.ExecutingTaskScheduler为null - Task.CapturedContext不为null,但没有任何有用的引用 - Dispatcher.CurrentDispatcher._queue可能有用吗? - TaskScheduler.Current.ScheduledTasks为空
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace TaskWatchSimple
{
class Program
{
static Task t1;
static Task t2;
static void Main(string[] args)
{
t1 = new Task(Test);
t1.Start();
t2 = TestAsync();
Debugger.Break();
}
static async Task TestAsync()
{
for (int i = 0; i < 5; i++)
await Task.Delay(2000);
}
static void Test()
{
for (int i = 0; i < 5; i++)
Thread.Sleep(2000);
}
}
}