Что произойдет в ConcurrentDictionary, если возникнет сговор при попытке добавления и удаления?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Что произойдет в ConcurrentDictionary, если возникнет сговор при попытке добавления и удаления?

Сообщение Anonymous »

В моем BL я хочу, чтобы определенный код не выполнялся, пока другой поток уже выполняется.

Проблема в том, что этот код может быть выполнен ( по требованию) один раз для каждого клиента, но не дважды для одного и того же клиента

Я использовал C# ConcurrentDictionary, чтобы отслеживать клиентов, которые уже находятся в процессе, и когда выполнение завершено, я удалил их из ConcurrentDictionary, что произойдет, если я попытаюсь удалить идентификатор клиента из ConcurrentDictionary, пока другой поток пытается добавить (тот же или другой ключ)? ConcurrentDictionary блокирует запись и попытка удаления не удалась?

Код: Выделить всё

private static readonly ConcurrentDictionary m_customerInProgress = new ConcurrentDictionary();

public void ExecuteLogic(int customerId)
{
if (m_customerInProgress.TryAdd(customerId, DateTime.Now) == false)
{
this.Log().Info("customer in progress ");
return;
}

try
{
DoSomething();
}
catch (Exception ex)
{
this.Log().Info("DoSomething failed ");
}
finally
{
DateTime startDateTime;

if (m_customerInProgress.TryRemove(customerId, out startDateTime) == false)
{
this.Log().Fatal("this should never happens");
}
else
{
this.Log().Info("customer finished execution");
}
}
}
Может ли this.Log().Fatal("это никогда не должно произойти"); когда-либо произойти?

Что произойдет, если попытки добавления и удаления будут выполняться одновременно для одного и того же ключа?

Что произойдет, если они будут выполняться для разных ключи?

Подробнее здесь: https://stackoverflow.com/questions/574 ... ry-add-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»