执行Task.Delay

时间:2018-03-24 10:31:07

标签: c# multithreading debugging parallel-processing task

当我执行程序时,我注意到当代码在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时,有没有人知道显示当前任务和线程堆栈跟踪的任何解决方案?

0 个答案:

没有答案