using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections.Concurrent;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
var events = new List<string>();
foreach(var i in Enumerable.Range(0, 500)) {
events.Add(Guid.NewGuid().ToString());
}
var bag1 = new ConcurrentBag<string>();
var bag2 = new ConcurrentBag<string>();
var bag3 = new ConcurrentBag<Task<string>>();
var po = new ParallelOptions {MaxDegreeOfParallelism = 50 };
Parallel.ForEach(events, po, evt => {
if(int.TryParse(evt.Substring(0, 1), out var _)) {
bag1.Add(evt);
} );
Console.WriteLine(bag1.Count);
Parallel.ForEach(events, po, async evt => {
await Task.Yield();
bag2.Add(evt);
Console.WriteLine(bag2.Count);
bag3.Add(GetValue(evt));
Console.WriteLine(bag3.Count);
await Task.WhenAll(bag3.ToArray());
Console.WriteLine(bag3.Select(b => b.Result).Count());
private static async Task<string> GetValue(string v) {
return v;