У меня есть приложение, в котором я хочу, чтобы несколько потоков читали список. Я хочу периодически обновлять список новыми данными. Когда список обновлен, я полагаю, что могу создать новый список и заменить его старым. Пример:
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...
}
}
В методе UpdateList создается новый список, и ссылка _list заменяется новым списком. На мой взгляд, любой существующий поток по-прежнему будет содержать ссылку на старый список (что для меня нормально), любой новый поток получит новый список. В конце концов, все потоки закончатся, и старый список будет в конечном итоге собран мусором. Требуется ли какая-либо блокировка в этом коде или есть что-то, что мне нужно сделать для обеспечения безопасного многопоточного доступа?