大量的Task.Delay会导致性能问题吗?或者当我想使用它来延迟将消息传递到rabbitmq时,是否有更好的方法来替换它呢?
我最近写了一辆事件巴士和新奥尔良的结合。当消费者的消费异常时,我希望它在5分钟内再试几次,以修复由于短期系统不可用而导致的错误。我想使用等待任务。延迟实施,我不确定这是否会影响性能,或是否有更好的方法来实现我的想法。
谢谢。
发布于 2020-02-10 03:28:51
很多事情都会导致性能问题,然而等待的Task.Delay
是更好的方法之一。它是轻量级的,不阻塞线程,并且适用于相当轻量级的管道。其执行情况如下:
public static Task Delay(int millisecondsDelay, CancellationToken cancellationToken)
{
//error checking
Task.DelayPromise delayPromise = new Task.DelayPromise(cancellationToken);
if (cancellationToken.CanBeCanceled)
delayPromise.Registration = cancellationToken.InternalRegisterWithoutEC((Action<object>) (state => ((Task.DelayPromise) state).Complete()), (object) delayPromise);
if (millisecondsDelay != -1)
{
delayPromise.Timer = new Timer((TimerCallback) (state => ((Task.DelayPromise) state).Complete()), (object) delayPromise, millisecondsDelay, -1);
delayPromise.Timer.KeepRootedWhileScheduled();
}
return (Task) delayPromise;
}
Timer
只是包装了Win32计时器队列,这是一个在线程池上触发事件的增量队列:
CreateTimerQueue函数为计时器创建一个队列。此队列中的计时器(称为计时器-队列计时器)是轻量级对象,使您能够指定在指定的适当时间到达时要调用的回调函数。
https://stackoverflow.com/questions/60143643
复制相似问题