当我执行程序时,我注意到当代码在Task.Delay中时,调试器中没有任何任务或线程出现。
任务窗口或并行堆栈窗口中没有显示任务(可能是因为任务是在延迟完成后创建的)。
线程窗口中的线程存在,但它们位于本机未知的代码段中,因此不会显示调用堆栈。
下面的照片中可以显示一个例子:
Threads and Parallel stacks windows status while inside task.delay
代码示例:
public static async Task TaskC()
{
Console.WriteLine("c before");
await Task.Delay(3000);
Console.WriteLine("c before");
}
static void Main(string[] args)
{
var c = TaskC();
int[] dd = new int[3];
dd[0] = 0;
dd[1] = 1;
dd[2] = 2;
Parallel.ForEach(dd, async (e) => { await Task.Delay(3000); });
c.Wait();
}
任务/线程在代码的Task.Delay部分中的机会通常是最高的,因为它占用了大部分时间。 虽然在Task.Delay中是调试和查找任务和线程的最重要的时间,但这是它们不可见的时间......
当我们搜索错误时,我们并不总是能够记录断点命中以找到到达Task.Delay的代码,并且在程序暂停时接收当前状态非常重要。
当代码执行Task.Delay时,有没有人知道显示当前任务和线程堆栈跟踪的任何解决方案?