while(true)任务占用大量CPU

时间:2016-04-15 09:50:39

标签: c# multithreading

我有一个代码可以创建一个无限循环的任务来重复操作,例如检查ftp或网站

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; 
}

它消耗了大量的CPU,根据性能分析器,主CPU负载在这部分

resetEvent.WaitOne(timeout,true);

有没有解决方法可以解决这个问题?

0 个答案:

没有答案