J'ai une application où je veux que plusieurs threads lisent une liste. Je veux mettre à jour la liste avec de nouvelles données périodiquement. Lorsque la liste est mise à jour, je me dis que je peux créer une nouvelle liste et la remplacer par l'ancienne. Exemple :
private List<string> _list = new List<string>();
private void UpdateList()
{
var newList = new List<string>(QueryList(...));
_list = newList;
}
private void ThreadRun()
{
foreach (var item in _list)
{
// process item...
}
}
Dans la méthode UpdateList, une nouvelle liste est créée et la référence _list est échangée avec la nouvelle liste. D'après moi, tout thread existant conservera la référence à l'ancienne liste (ce qui me convient), et tout nouveau thread récupérera la nouvelle liste. Finalement, tous les threads se termineront et l'ancienne liste sera finalement ramassée. Un verrouillage est-il nécessaire dans ce code, ou dois-je faire attention à quelque chose pour garantir un accès multithread sûr ?