Я работаю над веб-приложением ASP. NET, написанным на C# и размещенным на виртуальной машине Azure, использующей IIS 10 в качестве веб-сервера. Я должен запланировать выполнение фоновой задачи один раз в день. Чтобы добиться этого, я создал следующий класс DailyTask
:
public class DailyTask : IHostedService {
public Task StartAsync(CancellationToken cancellationToken) {
Debug.WriteLine("start");
Task.Run(TaskRoutine, cancellationToken);
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken) {
Debug.WriteLine("stop");
return null;
}
public Task TaskRoutine() {
while (true) {
try {
/* ... */
DateTime nextStop = DateTime.Now.AddDays(1);
var timeToWait = nextStop - DateTime.Now;
var millisToWait = timeToWait.TotalMilliseconds;
Thread.Sleep((int)millisToWait);
}
catch (Exception e) {
Debug.WriteLine(e);
}
}
}
}
Чтобы запустить эту задачу, я добавил следующий оператор в свой класс Startup
:
public class Startup {
public void ConfigureServices(IServiceCollection services) {
/* ... */
services.AddSingleton<Microsoft.Extensions.Hosting.IHostedService, HiddenUserCleaner>();
/* ... */
}
}
После развертывания в На моем тестовом сервере я заметил, что это решение работает нормально. Но надежно ли это? Могут ли быть проблемы при использовании в производстве?