Below we have a synchronous example when each worker counts to 10.
private static List<string> workers = new List<string>(){"A","B","C"};
static void Main(string[] args)
{
CallWorkers();
Console.ReadKey();
}
private static void CallWorkers()
{
foreach (string workerName in workers)
{
Work(workerName);
}
}
private static void Work(string workerName)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("WORKER " + workerName+ " - " + (i + 1));
}
}Output
WORKER A - 1 WORKER A - 2 WORKER A - 3 WORKER A - 4 WORKER A - 5 WORKER A - 6 WORKER A - 7 WORKER A - 8 WORKER A - 9 WORKER A - 10 WORKER B - 1 WORKER B - 2 WORKER B - 3 WORKER B - 4 WORKER B - 5 WORKER B - 6 WORKER B - 7 WORKER B - 8 WORKER B - 9 WORKER B - 10 WORKER C - 1 WORKER C - 2 WORKER C - 3 WORKER C - 4 WORKER C - 5 WORKER C - 6 WORKER C - 7 WORKER C - 8 WORKER C - 9 WORKER C - 10
The execution of the workers is sequential by the order of call.
private static List<string> workers = new List<string>(){"A","B","C"};
static void Main(string[] args)
{
CallWorkersParallelAsync();
Console.ReadKey();
}
private static async Task CallWorkersParallelAsync()
{
List<Task> tasks = new List<Task>();
foreach (string workerName in workers)
{
tasks.Add(Task.Run(() => Work(workerName)));
}
await Task.WhenAll(tasks);
}
private static void Work(string workerName)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("WORKER " + workerName+ " - " + (i + 1));
}
}Output
WORKER A - 1 WORKER A - 2 WORKER A - 3 WORKER A - 4 WORKER A - 5 WORKER A - 6 WORKER A - 7 WORKER A - 8 WORKER A - 9 WORKER A - 10 WORKER B - 1 WORKER B - 2 WORKER B - 3 WORKER B - 4 WORKER B - 5 WORKER C - 1 WORKER C - 2 WORKER C - 3 WORKER C - 4 WORKER C - 5 WORKER C - 6 WORKER C - 7 WORKER C - 8 WORKER C - 9 WORKER C - 10 WORKER B - 6 WORKER B - 7 WORKER B - 8 WORKER B - 9 WORKER B - 10
The execution of the workers is parallel, they are running at the same time. At each run the output can be diffrent.