Я создал приложение Service Fabric. В методе RunAsync () существует долгосрочное задание, например «LoadData (), которое переносит миллионы записей из базы данных в словарь ServiceFabric».
Согласно документации MSDN, службы, которые хотят реализовать фоновую задачу, который запускается при запуске службы, должен переопределить этот метод с помощью своей логики «RunAsync (CancellationToken)» *
Маркер отмены используется для отслеживания запросов на отмену, существует из RunAsync () и закрывает службу. Так что я использовал CancellationToken в моем проекте.
Вот мой код
RunAsync (System.Threading.CancellationToken cancellationToken);
{
LoadData(CancellationToken);
}
Async Task LoadData(CancellationToken)
{
Method1(CancellationToken) -- Aync call
Method2() -- Normal call
Method3() -- Normal call
}
Как вы можете видеть, у меня есть Method1, который является асинхронным вызовом, и он работает как отдельный поток, так чтоэтот же токен передается этому методу, так как основной поток не будет знать о дочернем потоке. Однако Method2 и Method3 являются просто функциональными вызовами, поэтому CancellationToken не передается, поскольку они выполняются в контексте основного потока.
У меня есть пара вопросов по использованию CancellationToken в Service Fabric. 1. Нужно ли передавать CancellationToken для всех методов, которые вызываются из долгосрочного метода (Async / Sync)? 2. То, как я обработал CancellationToken, правильно или мне нужно что-то изменить?