Я написал простой дебаунсер для использования с ASP.NET Core 5 (для обнаружения изменений в файлах конфигурации). Это будет использоваться в классе Startup
. Это работает хорошо.
Однако я получаю предупреждение анализатора:
Не создавайте задачи без передачи TaskScheduler csharp(CA2008)
Код проблемы:
Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(
task => someAction(),
cancellationToken
);
Что из следующего я должен использовать, и как они отличаются?
Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(
task => someAction(),
cancellationToken,
TaskContinuationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext() // <---
);
Task.Delay(TimeSpan.FromSeconds(2)).ContinueWith(
task => someAction(),
cancellationToken,
TaskContinuationOptions.None,
TaskScheduler.Default // <---
);
SynchronizationContext
. Прочтите статью Стивена Клири - person Peter Csala   schedule 04.03.2021TaskScheduler.Default
- person Matthew Watson   schedule 04.03.2021ContinueWith
? Значение по умолчанию (возвращаемое TaskScheduler.Default) работает нормально.await Task.Delay(TimeSpan.FromSeconds(2));
тоже работает нормально - person Panagiotis Kanavos   schedule 04.03.2021CA2008
, поэтому я просто хочу использовать то, что является безопасным по умолчанию в ядре aspnet, к сожалению, я не знаю, что это такое. Я продолжаю читать, что это источник ошибок, если это не сделано должным образом, отсюда и мой вопрос. - person lonix   schedule 04.03.2021Task.Delay
. Почему бы вам не использоватьawait
? В ASP.NET Core нетSynchronizationContext
, поэтомуawait
не будет блокироваться. - person Panagiotis Kanavos   schedule 04.03.2021Startup.Configure()
, который не является асинхронным. - person lonix   schedule 04.03.2021Configure
не место для включения логических и асинхронных операций. Если вы хотите включить параметры конфигурации из удаленного источника, создайте отдельный поставщик конфигурации и реализуйте его асинхронные операции. РаботаConfigure
состоит в том, чтобы подключать источники, а не действовать как источник - person Panagiotis Kanavos   schedule 04.03.2021ContinueWith
для добавления продолжений, используйтеawait
для добавления продолжений к методам. Это значительно упрощает написание правильного кода. - person Servy   schedule 04.03.2021appsettings
не используется необычным образом - переписывая его, например, для изменения отдельных записей или, что еще хуже, когда само приложение изменяет файл. Если вы хотите изменить настройки во время выполнения, используйте другой источник, например источник в памяти. - person Panagiotis Kanavos   schedule 04.03.2021file closed
отсутствует, поэтому невозможно узнать, когда файл копируется. Если приложение умное и выделяет все необходимое пространство перед записью каких-либо изменений в файл, вы можете получить только 1 событие изменения файла, даже для больших файлов. - person Panagiotis Kanavos   schedule 05.03.2021