LenovoLegionToolkit

Форк
0
43 строки · 1.1 Кб
1
using System;
2
using System.Threading;
3
using System.Threading.Tasks;
4

5
namespace LenovoLegionToolkit.Lib.Utils;
6

7
public class ThrottleLastDispatcher
8
{
9
    private readonly TimeSpan _interval;
10
    private readonly string? _tag;
11

12
    private CancellationTokenSource? _cancellationTokenSource;
13

14
    public ThrottleLastDispatcher(TimeSpan interval, string? tag = null)
15
    {
16
        _interval = interval;
17
        _tag = tag;
18
    }
19

20
    public async Task DispatchAsync(Func<Task> task)
21
    {
22
        try
23
        {
24
            _cancellationTokenSource?.Cancel();
25
            _cancellationTokenSource = new();
26

27
            var token = _cancellationTokenSource.Token;
28

29
            await Task.Delay(_interval, token).ConfigureAwait(false);
30
            token.ThrowIfCancellationRequested();
31

32
            if (_tag is not null && Log.Instance.IsTraceEnabled)
33
                Log.Instance.Trace($"Allowing... [tag={_tag}]");
34

35
            await task().ConfigureAwait(false);
36
        }
37
        catch (OperationCanceledException)
38
        {
39
            if (_tag is not null && Log.Instance.IsTraceEnabled)
40
                Log.Instance.Trace($"Throttling... [tag={_tag}]");
41
        }
42
    }
43
}
44

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.