C# 带有while(true)的任务消耗大量CPU

C# 带有while(true)的任务消耗大量CPU,c#,multithreading,C#,Multithreading,我有一个代码,它创建了一个任务,其中包含无限循环,用于重复操作,例如检查ftp或web站点 public static Task Start(Action<WorkContext> action, WorkContext wcntx, int timeout) { AutoResetEvent resetEvent = new AutoResetEvent(false); wcntx.ResetEvents.Add(resetEvent); Task tas

我有一个代码,它创建了一个任务,其中包含无限循环,用于重复操作,例如检查ftp或web站点

public static Task Start(Action<WorkContext> action, WorkContext wcntx, int timeout)
{
    AutoResetEvent resetEvent = new AutoResetEvent(false);
    wcntx.ResetEvents.Add(resetEvent);

    Task task = Task.Factory.StartNew(() =>
    {
        wcntx.CancellationToken.ThrowIfCancellationRequested();

        while (true)
        {
            action(wcntx);

            //Delay
            resetEvent.WaitOne(timeout,true);

            //Checking CancellationToken
            wcntx.CancellationToken.ThrowIfCancellationRequested();
        }

    }, wcntx.CancellationToken);  

    return task; 
}

是否有任何解决方案可以解决此问题?

您的
超时值是多少?
?每次都不同。我一次完成了50多个这样的任务,超时时间从10毫秒到30毫秒。我在使用分析器方面不是很有经验,但我认为这表明这段代码经常运行,但不是由哪个任务运行的。如果您每10-30毫秒运行50个任务,那么这会占用您的cpu也就不足为奇了。加上50个任务也需要大量的调度。顺便说一句:如果你的
resetEvent
s只是用来取消,你可以使用它本身。你确定这是CPU使用量而不是时间消耗吗?当然,分析器将显示30毫秒的延迟将消耗30毫秒。除此之外,50个线程每秒唤醒30次所生成的调度也不算太糟糕。这不应该引起重大问题。每秒1500次上下文切换是我的机器空闲时所做的。
resetEvent.WaitOne(timeout,true);