This small demonstration code snippet will show you how to:
- Create threads to run code in the background of your application
- Demonstrate how to pass one or more parameters to a background thread
- Demonstrate how to wait for all background activity to finish before exiting the main program.
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplicationThreadTest
{
/// <summary>
/// This is a simple demonstration of starting background tasks for processing and passing
/// parameters to them.
/// </summary>
class Program
{
static void Main(string[] args)
{
Console.WriteLine("main thread start");
// we need a tasklist to check when the main thread can safely exit
var oTasklist = new List<Task>();
// Create 10 tasks. You will find from the console output that the task factory
// makes its own decissions about the order in which the tasks are started, meaning
// you can make no assumptions about the order in which they will execute.
for (int i = 1; i < 11; i++)
{
int taskno = i;
var oTask = Task.Factory.StartNew(() => StaticThreadWorker(taskno));
oTasklist.Add(oTask);
}
// Wait for all factory tasks to finish
Task.WaitAll(oTasklist.ToArray());
// End programm
Console.WriteLine("main thread end");
}
// A simple background task that waits for a random time of 0-1000ms
private static void StaticThreadWorker(int t)
{
Console.WriteLine("thread start " + t.ToString());
var random = new Random(t);
int wait = random.Next(1000);
Thread.Sleep(wait);
Console.WriteLine("thread " + t + " ended after " + wait + "ms.");
}
}
}