/// <summary> /// Worker task that will send pending messages. /// </summary> /// <param name="token"></param> private async Task WorkerProcAsync(CancellationToken token = default(CancellationToken)) { var serviceType = typeof(T).FullName; _logger.Debug($"Begin WorkerProc - Service Type: {serviceType}"); while (true) { if (token.IsCancellationRequested) { token.ThrowIfCancellationRequested(); } try { _logger.Debug($"Start Sending Pending Messages - Service Type: {serviceType}"); await SendPendingMessages(token : token).ConfigureAwait(false); _logger.Debug($"Finished Sending Pending Messages - Service Type: {serviceType}"); } catch (OperationCanceledException) { break; } catch (Exception ex) { _logger.Error($"Retry failed - Service Type: {serviceType}", ex); } finally { _logger.Debug($"End check: WorkerProc - Service Type: {serviceType}"); } var timeToWait = Convert.ToInt32(_retryTimeSpan.TotalMilliseconds); _logger.Debug($"^^^^ Starting Wait Loop: timeToWait: {timeToWait} - Service Type: {serviceType}"); _platformService.GetAvailableThreads(out var worker, out var completionPort); _logger.Debug($"1............. Managed Thread Id {Environment.CurrentManagedThreadId}, WorkThreads {worker}, CompletionPortThreads {completionPort}, - Service Type: {serviceType}"); while (timeToWait > 0) { if (token.IsCancellationRequested) { _logger.Info($"Breaking loops because CanRun is false. Service Type: {serviceType}"); break; } try { _logger.Debug($"Starting Wait: timeToWait: {timeToWait} Thread ID: {Task.CurrentId.GetValueOrDefault()}, Managed Thread Id {Environment.CurrentManagedThreadId} - Service Type: {serviceType}"); await Task.Delay(5000, token).ConfigureAwait(false); _platformService.GetAvailableThreads(out worker, out completionPort); _logger.Debug($"2............. Managed Thread Id {Environment.CurrentManagedThreadId}, WorkThreads {worker}, CompletionPortThreads {completionPort}, - Service Type: {serviceType}"); _logger.Debug($"Finished Waiting: timeToWait: {timeToWait} Thread ID: {Task.CurrentId.GetValueOrDefault()}, Managed Thread Id {Environment.CurrentManagedThreadId} - Service Type: {serviceType}"); timeToWait -= 5000; } catch (OperationCanceledException) { break; } } _platformService.GetAvailableThreads(out worker, out completionPort); _logger.Debug($"3............. Managed Thread Id {Environment.CurrentManagedThreadId}, WorkThreads {worker}, CompletionPortThreads {completionPort}, - Service Type: {serviceType}"); _logger.Debug($"Finished wait loop. Service Type: {serviceType}"); } _logger.Debug($"End WorkerProc - Service Type: {serviceType}"); }