В одном из моих проектов у меня есть требование добавлять Задачи для каждой новой записи, которую мы добавляем для клиента, и эти задачи создаются с использованием параметров LongRunning, так что, когда мы получаем любой запрос от этого клиента, все эти запросы должны обрабатываться из Только бэкэнд-сервис.
Ниже приведен пример кода, в котором я добавляю клиента в задачу, а когда клиент не хочет связываться с нами, мы удаляем его из задачи
публичный словарь
_cancellationTokenSourcesForChannels = new Dictionary ();
public void AddCustomerToTask(int custId, CancellationToken cancelToken)
{
var cust = custSvc.SessionFactory.OpenSession().Get<Customer>(custId);
var custModel = new CustomerModel().FromCustomer(cust);
var tokenSource = new CancellationTokenSource();
var taskPoller = new Task(() => WindowsService.Start(custModel), tokenSource.Token,
TaskCreationOptions.LongRunning);
taskPoller.Start();
//Maintaining list of cancellationTokenSource in Dictionary
if (_cancellationTokenSourcesForChannels == null)
_cancellationTokenSourcesForChannels = new Dictionary<int, CancellationTokenSource>();
if (_cancellationTokenSourcesForChannels.ContainsKey(custId))
_cancellationTokenSourcesForChannels.Remove(custId);
_cancellationTokenSourcesForChannels.Add(custId, tokenSource);
}
public void RemoveCustomerFromTask(int custId)
{
CancellationTokenSource currentToken;
if (_cancellationTokenSourcesForChannels.ContainsKey(custId))
{
_cancellationTokenSourcesForChannels.TryGetValue(custId, out currentToken);
currentToken?.Cancel();
}
if (_cancellationTokenSourcesForChannels.ContainsKey(custId))
_cancellationTokenSourcesForChannels.Remove(custId);
}
Итак, мой вопрос заключается в том, что когда я делаю запрос на удаление клиента, который не хочет связываться, я звоню RemoveCustomerFromTask (custId), тогда в основном код пытается отменить задачу для этого клиента. Но что интересно, он отменяет все задачи, которые были созданы и для других клиентов.
Не могли бы вы помочь мне здесь, как исправить мою проблему?
Я сохраняю список canceltoken в словаре для удаления при вызове метода RemoveCustomerFromTask.