.NET如何通过While循环保持Threading.Task活着

时间:2016-06-28 16:15:29

标签: .net multithreading infinite-loop cancellationtokensource

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

我的EWS托管API应用程序会在事件发生的每个时间跨越一个新任务。

我的应用程序运行大约30-35%的CPU使用率,所以我决定运行这个诊断工具来找出问题和原因。

我得到了这个,需要确保我所看到的是正确的。

从下面的图片可以看出,Task.StartNew函数执行了5次,导致CPU使用率过高?

更新

在深入了解之后,我发现了似乎是" Stacktrace"一些函数调用以红色突出显示,我感觉红色表示这些函数导致高CPU,并且这些函数似乎来自EWS托管API代码。

Analysis Report

enter image description here

1 个答案:

答案 0 :(得分:0)

我发现CPU吃了一段代码。

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

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

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

所以我使用了

        _CancelSignal = New AutoResetEvent(False)

        _CancelSignal.WaitOne()

让线程进入睡眠状态,直到我通过设置_CancelSignsal

告诉它退出