I am getting an error when looping array from async method as Parallel. When debuging, I can see count of the resultsArray is 11. But after stepping over a few times, it showed me "Source array was not long enough" Can I please get what the issue of my code?
public async Task<IActionResult> Generate(int id)
{
List<Product> products = new List<Product>();
Result[] resultArray = await Manager.GetResultArray();
Parallel.ForEach(resultArray , result=> //Error here
{
SomeMethod(result)); // SomeMethod cast result to Produc class and add to products list
});
...
}
List
is not an thread safe collection, which you are trying to update from multiple threads. You can try to use ConcurrentBag
in this case:
var products = new ConcurrentBag<Product>();
Result[] resultArray = await Manager.GetResultArray();
Parallel.ForEach(resultArray , result=> //Error here
{
SomeMethod(result)); // SomeMethod should add to ConcurrentBag
});
...