Obecnie piszę aplikację C#. Jestem nowy w użyciu ConcurrentDictionary, więc miej kilka pytań dotyczących bezpieczeństwa wątków. Po pierwsze, jest to mój słownik:kilka pytań dotyczących używania ConcurrentDictionary
/// <summary>
/// A dictionary of all the tasks scheduled
/// </summary>
private ConcurrentDictionary<string, ITask> tasks;
I instancji w moim klasy i użyć go do śledzenia wszystkich moich obiektów, które implementują iTask. Chcę, aby moja konfiguracja działała poprawnie w środowisku wielowątkowym.
Jeśli wiele wątków chce uzyskać liczbę elementów w ConcurrentDictionary, czy muszę je zablokować?
Jeśli chcę uzyskać określony klucz ze słownika, pobrać obiekt tego klucza i wywołać metodę na nim, czy muszę go zablokować? np .:
/// <summary>
/// Runs a specific task.
/// </summary>
/// <param name="name">Task name.</param>
public void Run(string name)
{
lock (this.syncObject)
{
var task = this.tasks[name] as ITask;
if (task != null)
{
task.Execute();
}
}
}
Utrzymywanie umysłu w wielu wątkach może wywoływać metodę Run w celu wywołania metody Execute programu ITask. Moim celem jest, aby wszystko było bezpieczne i jak najbardziej wydajne.
jest zabezpieczeniem wątku '.count'? lub metoda '.Count()'? Jaka jest różnica? – Zapnologica