У меня есть класс, зарегистрированный как синглтон. В конструкторе этого класса я подписываюсь на IOptonsMonitor.OnChange:
class Test
{
public Test(IOptionsMonitor<MyOptions> myOptionsMonitor)
{
myOptionsMonitor.OnChange(async options => await SomeWork());
}
public async Task SomeWork()
{
await Task.Delay(TimeSpan.FromSeconds(30));
}
}
В этом случае задача SomeWork на самом деле будет «Огонь и забыл», что, вероятно, неправильно. Другой подход заключается в синхронном запуске SomeWork:
myOptionsMonitor.OnChange(options => SomeWork().GetAwaiter().GetResult());
Но в этом случае OnChange будет заблокирован на время выполнения SomeWork.
Какой подход будет более правильным?