.NET 如何使用 While 循环使 Threading.Task 保持活动状态

.NET How to keep a Threading.Task alive with a While Loop

我以前没有使用 Windows 的 DebugDiag 的经验,需要对此报告有一些了解。

我的 EWS Managed API 应用程序每次发生事件时都会跨越一个新任务。

我的应用 运行 的使用率约为 30-35% CPU,因此我决定 运行 使用此诊断工具找出问题所在和原因。

我明白了,需要确保我看到的和我想的一样。

从下图来看是Task.StartNew函数执行了5次,导致CPU使用率这么高?

更新

深入观察后,我发现似乎是 "Stacktrace",其中一些函数调用以红色突出显示,我感觉红色表示这些函数导致高 CPU,并且这些函数似乎来自 EWS Managed API 代码。

我找到了 CPU 吃的代码。

我在 Tast 中有一个无限的 while 循环,因为我需要防止它被垃圾收集。

        While Not pToken.IsCancellationRequested
            If pToken.IsCancellationRequested Then Return
        End While

这导致我的 CPU 使用率一直高达 38%!

所以我改用

        _CancelSignal = New AutoResetEvent(False)

        _CancelSignal.WaitOne()

让线程休眠直到我通过设置 _CancelSignsal

告诉它退出