Was passiert in ConcurrentDictionary, wenn es beim Versuch, etwas hinzuzufügen und zu entfernen, zu einer Absprache kommC#

Ein Treffpunkt für C#-Programmierer
Guest
 Was passiert in ConcurrentDictionary, wenn es beim Versuch, etwas hinzuzufügen und zu entfernen, zu einer Absprache komm

Post by Guest »

In meinem BL möchte ich, dass ein bestimmter Code nicht ausgeführt wird, während ein anderer Thread bereits läuft.

Das Problem ist, dass der Code ausgeführt werden kann ( nach Bedarf) einmal für jeden Kunden, aber nicht zweimal für denselben Kunden

Ich habe das C# ConcurrentDictionary verwendet, um den Überblick zu behalten, welche Kunden bereits in Bearbeitung sind und wann Die Ausführung ist abgeschlossen. Ich habe sie aus dem ConcurrentDictionary entfernt., was wird Passiert das, wenn ich versuche, die Kunden-ID aus dem ConcurrentDictionary zu entfernen, während ein anderer Thread versucht, (den gleichen oder einen anderen Schlüssel) hinzuzufügen? Ist das ConcurrentDictionary für das Schreiben gesperrt und der Versuch, es zu entfernen, schlägt fehl?

Code: Select all

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");
}
}
}
Kann das this.Log().Fatal("dies sollte niemals passieren"); jemals passieren?

Was passiert, wenn die Befehle „Try Add“ und „Try Remove“ gleichzeitig für denselben Schlüssel ausgeführt werden?

Was passiert, wenn sie für verschiedene Schlüssel ausgeführt werden? Schlüssel?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post