/// <summary> /// ThreadInfo /// </summary> /// <param name="arg"></param> /// <returns></returns> private Task ThreadInfoTimerCallback(ThreadInfoStatistics arg) { // memo: send metrics to datadog or any favor you like. DatadogTracing.ThreadInfoTimerGauge(arg); var usingWorkerThreads = arg.MaxWorkerThreads - arg.AvailableWorkerThreads; _logger.LogInformation($"ThreadInfo AvailableWorkerThreads {arg.AvailableWorkerThreads}; MaxWorkerThreads {arg.MaxWorkerThreads}; UsingWorkerThreads {usingWorkerThreads}; ThreadCount {arg.ThreadCount}; QueueLength {arg.QueueLength}; LockContentionCount {arg.LockContentionCount}; CompletedItemsCount {arg.CompletedItemsCount}; AvailableCompletionPortThreads {arg.AvailableCompletionPortThreads}"); return(Task.CompletedTask); }