using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Forms;
protected static Form frm = null;
static void Main(string[] args)
var cts = new CancellationTokenSource();
Enumerable.Range(0, tasksCount).ToList()
.ForEach(x => frm.Controls.Add(new Label() { Left = 10, Top = 22 * x, }));
Task.Run(() => CreateJobs(tasksCount, cts.Token));
static async Task CreateJobs(int numberOfTasks, CancellationToken token)
List<Task> tasks = new List<Task>();
for (int i = 0; i < numberOfTasks; i++) {
tasks.Add(PayLoad(i, token));
await Task.WhenAll(tasks);
static async Task PayLoad(int taskNumber, CancellationToken token)
Console.WriteLine($"Task {taskNumber} is starting...");
for (int i = 1; i < 10; i++) {
if (token.IsCancellationRequested) return;
Console.WriteLine($"Task {taskNumber} - iteration {i} ");
frm.BeginInvoke(new MethodInvoker(() => frm.Controls[taskNumber].Text = i.ToString()));