[[Property:title|Pools]]
[[Property:weight|0]]
[[Property:uuid|ace044b0-1fb7-22a0-6c18-880281ed3b6d]]
This sample demonstrates use of the <eiffel>THREAD_POOL</eiffel> (ThreadPool) class. The sample queues up an asynchronous method call that is executed by a thread from the thread pool managed by the Common Language Runtime. The method "does some work" and then sets an event indicating that the work has finished. The main thread waits on the event and then exits. 

==Compiling==

To compile the example:   
# Launch EiffelStudio.
# Select '''Use existing Ace (control file)''' and click '''OK'''
# Browse to ''$ISE_EIFFEL\examples\dotnet\threading\pools\''
# Choose the Ace file for the version of the .net framework you are running
# Choose the directory where the project will be compiled, by default the same directory containing the Ace file.
# Click '''OK'''.


==Running==

After you launch the sample, the following output appears: 
<code>
Main thread: Queuing an asynchronous operation.
Main thread: Performing other operations.
WorkItem thread: Performing asynchronous operation
Main thread: Waiting for asynchronous operation to complete.
</code>

When the display is finished, the application wait for you to pressed the return key to finished the application.

==Under the Hood==

This application shows how to use the thread <eiffel>THREAD_POOL</eiffel>. 
An asynchronous thread is launched: 
<code>
            return := {THREAD_POOL}.queue_user_work_item (create {WAIT_CALLBACK}.make (Current, $async_operation, l_async_operation_done))
</code>
and is associated to the local variable <code>l_async_operation_done</code>. Both threads perform simultaneously some operations. The main thread wait for the asynchronous thread to complete his own operations
<code>
            return := l_async_operation_done.wait_one
</code> to close the application. 


This sample uses the following .NET types: 
*  <eiffel>THREAD_POOL</eiffel> 
*  <eiffel>WAIT_CALLBACK</eiffel> 
*  <eiffel>AUTO_RESET_EVENT</eiffel> 

==Notes==

This sample is translated from the example located in the Samples\Technologies\Threading\Pools subdirectory of the .NET Framework SDK samples directory of Microsoft Visual Studio .NET. 




