У меня есть следующий псевдокод:Изменение каждого элемента в списке с нитями разных
public void Associar(List<Data> dados)
{
List<Task> tasks = new List<Task>();
foreach(dado in dados)
{
tasks.Add(AdicionarAsync(dado));
}
Task.WaitAll(tasks.ToArray());
Debug.WriteLine(dados.Select(e => e.Colecao).Sum(e => e.Count));
}
public async Task<List<Foo>> ConsultarNoBanco()
{
//make request
//here the result is OK
return result;
}
public async Task AdicionarAsync(Data dado)
{
dado.Colecao = await ConsultarNoBanco();
//Here the result (dado.Colecao) is wrong
//If I modify the code to ConsultarNoBanco().Result everything works fine
}
Выходной сигнал этого код всегда должен быть 411. Тем не менее, в результате изменяется каждый раз, когда метод Associar()
называется. Каков наилучший способ использования безопасного потока для изменения каждого элемента в коллекции с помощью многопоточного?
Попробуйте использовать метод 'Parallel.For'. – MaKCbIMKo
Вы не используете нить. Забудьте о потоках. [Нет нитки.] (Http://blog.stephencleary.com/2013/11/there-is-no-thread.html) – Maarten
Используйте [ConcurrentBag] (https://msdn.microsoft.com/en- us // library/dd381779 (v = vs.110) .aspx) или синхронизация, когда вы изменяете небезопасную коллекцию. –