Безопасно ли использовать Task.Delay с задержкой 24 часа? - PullRequest
0 голосов
/ 10 апреля 2020

Безопасно ли использовать Task.Delay() с задержкой в ​​24 часа в al oop для выполнения кода каждый день? Мой код:

while (!token.IsCancellationRequested) 
{
    await Task.Delay(TimeSpan.FromDays(1), token);
    await DoStuff(token);
}

Безопасно ли использовать Task.Delay() таким образом?

1 Ответ

5 голосов
/ 10 апреля 2020

Включая некоторый контекст из вашего комментария, нет, это не безопасный подход с ASP. net Core, так как очень вероятно, что ваш процесс будет переработан задолго до того, как будет достигнуто 24 часа.

Для подобной функциональности вам действительно стоит взглянуть на планировщик, который предназначен для сохранения состояния в какой-либо базе данных и имеет более длительный срок службы, чем обычно ядро ​​веб-хостинга.

Hangfire - довольно полная реализация о том, что вы ищете, посмотрите на https://www.hangfire.io/.

Если вы заинтересованы в создании чего-то самостоятельно, я бы предложил хостинговый сервис, который получил много любви в. NET Core 3+ и действительно очень solid сейчас. Вот документы Microsoft на это (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio), и здесь есть хороший пост в блоге, который дает хорошее пошаговое руководство с конкретным примером c (https://wakeupandcode.com/worker-service-in-asp-net-core/)

Общий шаблон, который вам здесь нужен, будет иметь службу, которая проверяет таблицу предстоящих задач каждые X минут и запускает необходимую задачу, если она истекла. Затем приведенный выше код просто необходимо адаптировать, чтобы поместить строку в таблицу с указанием времени выполнения функции DoStuff ().

...