C# 带有while(true)的任务消耗大量CPU
我有一个代码,它创建了一个任务,其中包含无限循环,用于重复操作,例如检查ftp或web站点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
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);