The events described in this article collect information about worker and I/O threads in the threadpool. For more information about how to use these events for diagnostic purposes, see logging and tracing .NET applications.
IOThreadCreate_V1 event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Raised when | 
| IOThreadCreate_V1 | 44 | An I/O thread is created in the thread pool. | 
The following table shows the event data.
| Field name | Data type | Description | 
| Count | win:UInt64 | Number of I/O threads, including the newly created thread. | 
| NumRetired | win:UInt64 | Number of retired worker threads. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
IOThreadTerminate_V1 event
The following table shows the keyword and level
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Raised when | 
| IOThreadTerminate | 45 | An I/O thread is terminated in the thread pool. | 
The following table shows the event data.
| Field name | Data type | Description | 
| Count | win:UInt64 | Number of I/O threads remaining in the thread pool. | 
| NumRetired | win:UInt64 | Number of retired I/O threads. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
IOThreadRetire_V1 event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Raised when | 
| IOThreadRetire_V1 | 46 | An I/O thread becomes a retirement candidate. | 
The following table shows the event data.
| Field name | Data type | Description | 
| Count | win:UInt64 | Number of I/O threads remaining in the thread pool. | 
| NumRetired | win:UInt64 | Number of retired I/O threads. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
IOThreadUnretire_V1 event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Raised when | 
| IOThreadUnretire_V1 | 47 | An I/O thread is unretired because of I/O that arrives within a waiting period after the thread becomes a retirement candidate. | 
The following table shows the event data.
| Field name | Data type | Description | 
| Count | win:UInt64 | Number of I/O threads in the thread pool, including this one. | 
| NumRetired | win:UInt64 | Number of retired I/O threads. | 
| ClrInstanceID | Win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadStart event
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadStart | 50 | A worker thread is created. | 
| Field name | Data type | Description | 
| ActiveWorkerThreadCount | win:UInt32 | Number of worker threads available to process work, including those that are already processing work. | 
| RetiredWorkerThreadCount | win:UInt32 | Number of worker threads that are not available to process work, but that are being held in reserve in case more threads are needed later. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadStop event
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadStop | 51 | A worker thread is stopped. | 
| Field name | Data type | Description | 
| ActiveWorkerThreadCount | win:UInt32 | Number of worker threads available to process work, including those that are already processing work. | 
| RetiredWorkerThreadCount | win:UInt32 | Number of worker threads that are not available to process work, but that are being held in reserve in case more threads are needed later. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadWait event
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadWait | 57 | A worker thread starts waiting for work. | 
| Field name | Data type | Description | 
| ActiveWorkerThreadCount | win:UInt32 | Number of worker threads available to process work, including those that are already processing work. | 
| RetiredWorkerThreadCount | win:UInt32 | Number of worker threads that are not available to process work, but that are being held in reserve in case more threads are needed later. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadRetirementStart event
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadRetirementStart | 52 | A worker thread retires. | 
| Field name | Data type | Description | 
| ActiveWorkerThreadCount | win:UInt32 | Number of worker threads available to process work, including those that are already processing work. | 
| RetiredWorkerThreadCount | win:UInt32 | Number of worker threads that are not available to process work, but that are being held in reserve in case more threads are needed later. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadRetirementStop event
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadRetirementStop | 53 | A retired worker thread becomes active again. | 
| Field name | Data type | Description | 
| ActiveWorkerThreadCount | win:UInt32 | Number of worker threads available to process work, including those that are already processing work. | 
| RetiredWorkerThreadCount | win:UInt32 | Number of worker threads that are not available to process work, but that are being held in reserve in case more threads are needed later. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadAdjustmentSample event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadAdjustmentSample | 54 | Refers to the collection of information for one sample; that is, a measurement of throughput with a certain concurrency level, in an instant of time. | 
The following table shows the event data.
| Field name | Data type | Description | 
| Throughput | win:Double | Number of completions per unit of time. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadAdjustmentAdjustment event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadAdjustmentAdjustment | 55 | Records a change in control, when the thread injection (hill-climbing) algorithm determines that a change in concurrency level is in place. | 
The following table shows the event data.
| Field name | Data type | Description | 
| AverageThroughput | win:Double | Average throughput of a sample of measurements. | 
| NewWorkerThreadCount | win:UInt32 | New number of active worker threads. | 
| Reason | win:UInt32 | Reason for the adjustment. 
 
 0x0- Warmup.
 
 0x1- Initializing.
 
 0x2- Random move.
 
 0x3- Climbing move.
 
 0x4- Change point.
 
 0x5- Stabilizing.
 
 0x6- Starvation.
 
 0x7- Thread timed out.
 
 0x8- Cooperative blocking. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolWorkerThreadAdjustmentStats event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Verbose (5) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolWorkerThreadAdjustmentStats | 56 | Gathers data on the thread pool. | 
The following table shows the event data
| Field name | Data type | Description | 
| Duration | win:Double | Amount of time, in seconds, during which these statistics were collected. | 
| Throughput | win:Double | Average number of completions per second during this interval. | 
| ThreadWave | win:Double | Reserved for internal use. | 
| ThroughputWave | win:Double | Reserved for internal use. | 
| ThroughputErrorEstimate | win:Double | Reserved for internal use. | 
| AverageThroughputErrorEstimate | win:Double | Reserved for internal use. | 
| ThroughputRatio | win:Double | The relative improvement in throughput caused by variations in active worker thread count during this interval. | 
| Confidence | win:Double | A measure of the validity of the ThroughputRatio field. | 
| NewcontrolSetting | win:Double | The number of active worker threads that serve as the baseline for future variations in active thread count. | 
| NewThreadWaveMagnitude | win:UInt16 | The magnitude of future variations in active thread count. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CLR or CoreCLR. | 
ThreadPoolEnqueue event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Verbose (5) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolEnqueue | 61 | A work item was enqueued in the thread pool queue. | 
The following table shows the event data
| Field name | Data type | Description | 
| WorkID | win:Pointer | Pointer to the work request. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CoreCLR. | 
ThreadPoolDequeue event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Verbose (5) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolDequeue | 62 | A work item was dequeued from the thread pool queue. | 
The following table shows the event data
| Field name | Data type | Description | 
| WorkID | win:Pointer | Pointer to the work request. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CoreCLR. | 
ThreadPoolIOEnqueue event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Verbose (5) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolIOEnqueue | 63 | A thread enqueues an IO completion notification after an async IO completion occurs. | 
The following table shows the event data
| Field name | Data type | Description | 
| NativeOverlapped | win:Pointer | Reserved for internal use. | 
| Overlapped | win:Pointer | Reserved for internal use. | 
| MultiDequeues | win:Boolean | Reserved for internal use. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CoreCLR. | 
ThreadPoolIODequeue event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Verbose (5) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolIODequeue | 64 | A thread dequeues the IO completion notification. | 
The following table shows the event data
| Field name | Data type | Description | 
| NativeOverlapped | win:Pointer | Reserved for internal use. | 
| Overlapped | win:Pointer | Reserved for internal use. | 
| MultiDequeues | win:Boolean | Reserved for internal use. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CoreCLR. | 
ThreadPoolIOPack event
The following table shows the keyword and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Verbose (5) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadPoolIOPack | 65 | ThreadPool overlapped IO pack is called. | 
The following table shows the event data
| Field name | Data type | Description | 
| NativeOverlapped | win:Pointer | Reserved for internal use. | 
| Overlapped | win:Pointer | Reserved for internal use. | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CoreCLR. | 
ThreadCreating event
The following table shows the keywords and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadCreating | 70 | Thread has been created. | 
The following table shows the event data.
| Field name | Data type | Description | 
| ID | win:Pointer | Thread ID | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CoreCLR. | 
ThreadRunning event
The following table shows the keywords and level.
| Keyword for raising the event | Level | 
| ThreadingKeyword(0x10000) | Informational (4) | 
The following table shows the event information.
| Event | Event ID | Description | 
| ThreadRunning | 71 | Thread has started running. | 
The following table shows the event data.
| Field name | Data type | Description | 
| ID | win:Pointer | Thread ID | 
| ClrInstanceID | win:UInt16 | Unique ID for the instance of CoreCLR. |