В одном из моих проектов у меня есть требование добавлять задачи для каждой новой записи, которую мы добавляем для клиента, и эти задачи создаются с использованием параметров LongRunning, так что, когда мы получаем любой запрос от этого клиента, все эти запросы необходимо обрабатывать только из серверной службы. .
Ниже приведен пример кода, в котором я добавляю клиента к задаче, и когда клиент не хочет связываться с нами, мы удаляем его из задачи.
общедоступный словарь _cancellationTokenSourcesForChannels = новый словарь();
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), тогда в основном код пытается отменить задачу для этого клиента. Но что интересно, он также отменяет все задачи, которые были созданы для других клиентов.
Не могли бы вы помочь мне здесь, как исправить мою проблему?
Я сохраняю список маркеров отмены в словаре для удаления при вызове метода RemoveCustomerFromTask.