ho dichiarato un dizionario di dicionary:Restituzione di un dizionario in C# in un ambiente multi-threaded
Dictionary<String, Dictionary<String, String>> values;
Ho un getter per ottenere un dizionario ad un indice specifico:
public Dictionary<String,String> get(String idx)
{
lock (_lock)
{
return values[moduleName];
}
}
Come puoi vedere che sto lavorando in un ambiente multi-thread. La mia domanda è ho bisogno di restituire una copia del mio dizionario al fine di essere sicuri come questa discussione:
public Dictionary<String,String> get(String idx)
{
lock (_lock)
{
return new Dictionary<string, string>(values[moduleName]);
}
}
Se non sarà la classe che chiama il getter ricevere una copia (quindi se rimuovo questo dizionario dal mio Dictionary<String, Dictionary<String, String>>
funzionerà ancora)?
Cheers,
Thierry.
Probabilmente non si dovrebbe restituire il dizionario, ma se lo fai, allora sì, è necessario fare una copia mentre si è all'interno di un monitor. Puoi descrivere quale dovrebbe essere lo scopo di questo costrutto? – Groo
Oppure utilizzare un [dizionario thread-safe] (http://msdn.microsoft.com/en-us/library/dd287191.aspx) –
Grazie per la risposta. –