Attualmente sto scrivendo un'applicazione C#. Sono nuovo nell'usare un ConcurrentDictionary quindi ho alcune domande sulla sicurezza del thread. In primo luogo, questo è il mio dizionario:alcune domande sull'uso di ConcurrentDictionary
/// <summary>
/// A dictionary of all the tasks scheduled
/// </summary>
private ConcurrentDictionary<string, ITask> tasks;
ho un'istanza di questo nella mia classe e utilizzarlo per tenere traccia di tutti i miei oggetti che implementano ITask. Voglio assicurarmi che il mio setup funzioni correttamente in un ambiente multi-thread.
Se più thread desiderano ottenere il conteggio del numero di elementi in ConcurrentDictionary, è necessario bloccarlo?
Se voglio ottenere una chiave particolare dal dizionario, ottenere l'oggetto di quella chiave e chiamare un metodo su di esso, devo bloccarlo? ad esempio:
/// <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();
}
}
}
Mantenere la mente più thread possono chiamare il metodo Run cercando di chiamare il metodo Execute ITask. Il mio obiettivo è quello di avere tutto il thread sicuro e il più performante possibile.
è il thread di proprietà '.count' sicuro? o il metodo '.Count()'? Qual è la differenza? – Zapnologica