using System.Threading.Tasks;
using System.Collections.Generic;
using System.Diagnostics;
public class ProgramState
public static ProgramState programState = new ProgramState();
static async Task TaskThatSometimesReport(int randomSeed, IProgress<string> progress)
var random = new Random(randomSeed);
for (int i = 0; i < count; ++i)
int wait = random.Next(10, 400);
static async Task Main(string[] args)
List<string> sharedList = new List<string>();
var tasks = new List<Task>();
var progress = new Progress<string>(text =>
programState.theValue = 0;
for (int i = 0; i < count; ++i)
for (int x = 0; x < 9000000; x++) {
programState.theValue += 1;
Console.WriteLine($"{count} vs {programState.theValue}");
for (int i = 0; i < taskCount; ++i)
var task = TaskThatSometimesReport(i * 3024240, progress);
await Task.WhenAll(tasks);