protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _printingHubProxy.OnRequestInstalledPrintersAsync = async() => { var printers = Printers.GetInstalledPrinters(); _logger.LogInformation("Reporting {PrinterCount} printers to dispatcher", printers.Length); await _printingHubProxy.SetInstalledPrintersAsync(printers); }; _printingHubProxy.OnSpoolJobAsync = job => { _queue.Add(job); return(Task.CompletedTask); }; await _printingHubProxy.StartAsync(stoppingToken); _logger.LogInformation("Sending hello"); await _printingHubProxy.Hello(Assembly.GetEntryAssembly().GetName().Version.ToString(3)); var printers = Printers.GetInstalledPrinters(); _logger.LogInformation("Reporting {PrinterCount} printers to dispatcher", printers.Length); await _printingHubProxy.SetInstalledPrintersAsync(printers); _logger.LogInformation("Starting job processing"); foreach (var job in _queue.GetConsumingEnumerable(stoppingToken)) { _logger.LogInformation("Got {JobSize} {ContentType} job for printer {PrinterName}", job.Content.Length, job.ContentType, job.PrinterName); if (TryGetPrinterHandle(job.PrinterName, job.ContentType, out var printerHandle)) { try { printerHandle.Print(job.Content); } catch (PrinterException e) { _logger.LogError(e, "Unable to print"); } } else { _logger.LogWarning("Unable to get printer handle"); } } }