Gibt es verborgene Gefahren bei der Verwendung von Multithreading in einem mit Sperre gesperrten Objekt? , wo Mails aus 3 anderen Sprachen übersetzt werden können, da das Mail-Thread einen mehrsprachigen Inhalt hat. Die (Sprach-) Wörterbücher werden in ein gemeinsames Containerobjekt platziert. Diese Wörterbücher sind sehr groß und hängen davon ab, die Wörter für Übersetzungen aus sprachspezifischen Dateien zu lesen. Um zwei oder mehr E-Mails zur Änderung des Containerobjekts und die Sprachwörterbücher gleichzeitig zu verhindern, verwende ich den Methodenaufruf in der Methode. Da jede E -Mail Inhalte aus mehreren Sprachen haben kann, möchte ich die Datei zu Zugriff auf die verschiedenen Sprachdateien parallel für eine bessere Leistung und Benutzererfahrung machen. < /P>
Code: Select all
Dictionary Dictionaries;
Dictionary NewWords;
public void UpdatelanguageDictionaries()
{
lock(_lock)
{
DoStuff();
int i = 0;
Task[] tasks = new Task[3];
foreach(KeyvaluePair kvp in Dictionaries)
{
tasks[i] = TaskFactory.StartNew(() => kvp.Value.UpdateFromFile(NewWords[kvp.Key]));
i++;
}
Task.WaitAll();
DoMoreStuff();
}
}
Zuerst habe ich versucht, Multithreading mit
auf und
async zu verwenden, aber das ist nicht in einer Schlossanweisung zulässig (Hinweise auf MultitHhreading in Inside Inside Lock . nacheinander. Fehler aufgrund von Multithreading ist ebenfalls als schwer zu identifizieren bekannt. Daher ist ich nicht viel Zeit, um einen Fehler zu identifizieren, wenn es nur eine schlechte Idee ist, Multithreading in einem Schloss zu verwenden. < /P>
Wird es also gespeichert, Multithread -Code in einer Sperranweisung auszuführen, oder sollte ich es vermeiden?