Исходный код вики Сценарии
Редактировал(а) Alexandr Fokin 2024/04/22 12:09
Последние авторы
author | version | line-number | content |
---|---|---|---|
1 | |(% style="width:147px" %)Запустить задачу сейчас|(% style="width:684px" %){{code language="c#"}}public async Task TryRunNowWorkerAsync( | ||
2 | string name, | ||
3 | CancellationToken cancellationToken | ||
4 | ) | ||
5 | { | ||
6 | var jobKey = /* .. */; | ||
7 | |||
8 | // Проверка кол-ва сузествующих триггеров, | ||
9 | // если их больше определенного кол-ва, | ||
10 | // то нет смысла создавать еще один триггер-запуска. | ||
11 | { | ||
12 | var triggers = await scheduler.GetTriggersOfJob(jobKey, cancellationToken); | ||
13 | if (triggers.Count > n) | ||
14 | { | ||
15 | return; | ||
16 | } | ||
17 | } | ||
18 | |||
19 | // Создает триггер одноразового запуска. | ||
20 | await scheduler.TriggerJob(jobKey, cancellationToken); | ||
21 | }{{/code}}|(% style="width:658px" %)При InMemory хранилище внутри используются блокировки. | ||
22 | Поэтому при высокой интенсивности лучше сделать отдельный поток (Task), который будут накапливать заявки и периодически запускаться. | ||
23 | При этом так, чтобы запись заявки была быстрой и неблокирующей. | ||
24 | |(% style="width:147px" %) |(% style="width:684px" %) |(% style="width:658px" %) | ||
25 | |(% style="width:147px" %) |(% style="width:684px" %) |(% style="width:658px" %) |