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");
}
}
}
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?