У меня возникают проблемы с представлением, как будет выглядеть ограничитель событий (он же debouncer) в .NET с async/await
.
Рассмотрим следующий код.
/// <summary>
/// A local, in-memory event throttler/debuouncer.
/// </summary>
public class EventThrottler
{
private TimeSpan _delay = TimeSpan.FromSeconds(5);
/// <summary>
/// Begin a timer to release callers of "AwaitEvent".
/// If a timer has already begun, push it back for the length of 5 seconds.
/// This method should not block.
/// </summary>
public void TriggerEvent()
{
}
/// <summary>
/// Multiple people can await.
/// Callers will be released exactly 5 seconds after the last call to "TriggerEvent".
/// If no call is ever made to "TriggerEvent", consumers of "AwaitEvent" will wait, indefinitely (or until CancellationToken is triggered).
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
public Task AwaitEvent(CancellationToken token)
{
return Task.CompletedTask;
}
}
Какой подход я должен использовать здесь?
A ManualResetEvent
, что все абоненты на AwaitEvent
могут ждать? Затем System.Timers.Timer
, который сбрасывается после каждого вызова на TriggerEvent
, что в конечном итоге освобождает событие?