In the C# programming language and .NET library, there are many ways to go about creating multi-threaded applications. One such way is by using the Task class available in .NET to create and run background tasks and a single or multiple threads in order to process data sets, increase application performance, or simply perform non-critical background processes without interfering with the UI thread or requiring end user input. Tasks are just one way of handling multithreading and stand apart from the Thread class in that they do not directly manipulate operating system threads.
Tasks can be run for a large host of purposes, large and small, and can be run both Synchronously and Asynchronously as well as run concurrently alongside other tasks, report their status, and even return data or manipulate the UI thread while running. Tasks are a very powerful and quite flexible solution to processing large tasks and data sets.