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