C# event debounce

后端 未结 14 1083
南旧
南旧 2020-11-28 06:22

I\'m listening to a hardware event message, but I need to debounce it to avoid too many queries.

This is an hardware event that sends the machine status and I have t

14条回答
  •  自闭症患者
    2020-11-28 06:46

    I needed a Debounce method for Blazor and kept coming back to this page so I wanted to share my solution in case it helps others.

    public class DebounceHelper
    {
        private CancellationTokenSource debounceToken = null;
    
        public async Task DebounceAsync(Func func, int milliseconds = 1000)
        {
            try
            {
                // Cancel previous task
                if (debounceToken != null) { debounceToken.Cancel(); }
    
                // Assign new token
                debounceToken = new CancellationTokenSource();
    
                // Debounce delay
                await Task.Delay(milliseconds, debounceToken.Token);
    
                // Throw if canceled
                debounceToken.Token.ThrowIfCancellationRequested();
    
                // Run function
                await func(debounceToken.Token);
            }
            catch (TaskCanceledException) { }
        }
    }
    

    Example call on a search function

     await OnSearchInput(eventArgs)) />
    
    @code {
        private readonly DebounceHelper debouncer = new DebounceHelper();
    
        private async Task OnSearchInput(ChangeEventArgs eventArgs)
        {
            await debouncer.DebounceAsync(async (cancellationToken) =>
            {
                // Search Code Here         
            });
        }
    }
    
    

提交回复
热议问题