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

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Was passiert in ConcurrentDictionary, wenn es beim Versuch, etwas hinzuzufügen und zu entfernen, zu einer Absprache komm

by Guest » 13 Jan 2025, 11:40

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?

Top