Languages
[Edit]
EN

C#/.NET - thread pool

13 points
Created by:
Elleanor-Williamson
320

Sometimes it is necessary to create a lot of threads in short time. When task is small, the time of thread creating and destroying could take more time than task execution. To solve this problem ThreadPool class is useful. It manages of thread pool and brings threads ready to execute tasks. After task executed puts thread back to pool for next tasks to save resources speeding up all.

Quick solution:

// using System;
// using System.Threading;

WaitCallback callback = (object arg) =>
{
    string cast = arg as string;

    // ...
};

ThreadPool.QueueUserWorkItem(callback, "arg 1");
ThreadPool.QueueUserWorkItem(callback, "arg 2");
ThreadPool.QueueUserWorkItem(callback, "arg 3");
// ...
ThreadPool.QueueUserWorkItem(callback, "arg N");

 

Practical example

using System;
using System.Threading;

namespace Test
{
	public class Program
	{
		static void Main(string[] args)
		{
			int tasksCount = 5;
			int iterationsCount = 5;

			WaitCallback callback = (object state) =>
			{
				int taskId = (int)state;

				for (int i = 0; i < iterationsCount; ++i)
				{
					int iterationId = i + 1;

					Console.WriteLine("Task " + taskId + "/" + tasksCount 
						+ ": Iteration " + iterationId + "/" + iterationsCount);
				}
			};

			for (int i = 0; i < tasksCount; ++i)
			{
				int taskId = i + 1;

				ThreadPool.QueueUserWorkItem(callback, taskId);
				//ThreadPool.QueueUserWorkItem(myTask.Execute, taskId);
				//ThreadPool.QueueUserWorkItem(new WaitCallback(myTask.Execute), taskId);
			}

			Thread.Sleep(1000);
		}
	}
}

Output:

Task 3/5: Iteration 1/5
Task 1/5: Iteration 1/5
Task 1/5: Iteration 2/5
Task 1/5: Iteration 3/5
Task 1/5: Iteration 4/5
Task 1/5: Iteration 5/5
Task 4/5: Iteration 1/5
Task 4/5: Iteration 2/5
Task 4/5: Iteration 3/5
Task 4/5: Iteration 4/5
Task 4/5: Iteration 5/5
Task 2/5: Iteration 1/5
Task 2/5: Iteration 2/5
Task 2/5: Iteration 3/5
Task 2/5: Iteration 4/5
Task 3/5: Iteration 2/5
Task 5/5: Iteration 1/5
Task 5/5: Iteration 2/5
Task 5/5: Iteration 3/5
Task 5/5: Iteration 4/5
Task 5/5: Iteration 5/5
Task 2/5: Iteration 5/5
Task 3/5: Iteration 3/5
Task 3/5: Iteration 4/5
Task 3/5: Iteration 5/5
Note: Code has been run with 4 cores CPU.

 

See also

  1. C#/.NET - max and min number of threads in thread pool

References

  1. ThreadPool Class - Microsoft Docs
Donate to Dirask
Our content is created by volunteers - like Wikipedia. If you think, the things we do are good, donate us. Thanks!
Join to our subscribers to be up to date with content, news and offers.

C# - Thread Class

Native Advertising
🚀
Get your tech brand or product in front of software developers.
For more information Contact us
Dirask - we help you to
solve coding problems.
Ask question.

❤️💻 🙂

Join