Исходный код вики Сценарии
Редактировал(а) Alexandr Fokin 2024/04/22 12:09
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
1.3 | 1 | |(% style="width:147px" %)Запустить задачу сейчас|(% style="width:684px" %){{code language="c#"}}public async Task TryRunNowWorkerAsync( |
| |
1.1 | 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 | { | ||
| |
1.2 | 15 | return; |
| |
1.1 | 16 | } |
| 17 | } | ||
| 18 | |||
| 19 | // Создает триггер одноразового запуска. | ||
| 20 | await scheduler.TriggerJob(jobKey, cancellationToken); | ||
| |
1.3 | 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" %) |