
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
1032
|
Chapter 18: Threading and Synchronization
is available or if the request for a new thread will have to be queued. Basically, you
want to know whether a thread is available for immediate use from the thread pool.
Solution
Use the ThreadPool.GetAvailableThreads method to get the number of worker
threads currently available in the
ThreadPool. This allows you to determine whether
you should queue another request to launch a thread via
ThreadPool.QueueUserWorkItem
or should take an alternate action.
The
Main method shown here calls a method (SpawnManyThreads) to spawn lots of
threads from the
ThreadPool, then waits for a bit to simulate processing:
public class TestThreads
{
public static void Run( )
{
SpawnManyThreads( );
// Have to wait here or the background threads in the thread
// pool would not run before the main thread exits.
Console.WriteLine("Main Thread waiting to complete...");
Thread.Sleep(2000);
Console.WriteLine("Main Thread completing...");
}
The SpawnManyThreads method launches threads and pauses between each launch to
allow the
ThreadPool to register the request and act upon it. The isThreadAvailable
method is called with the parameter set to true to determine whether there is a
worker thread available for use in the
ThreadPool:
public static bool SpawnManyThreads( )
{