dbenbyeon
dbenbyeon

Reputation: 195

Parallel Foreach array from async method

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
    });
    ...
}

Upvotes: 1

Views: 407

Answers (1)

Guru Stron
Guru Stron

Reputation: 143453

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
});
...

Upvotes: 1

Related Questions