private async void ProcessCommandQueue() { await Task.Run(async() => { var spinWait = new SpinWait(); while (true) { try { if (!_commands.IsEmpty && _commands.TryDequeue(out var command)) { var request = new TelloRequest(command); var response = new TelloResponse(await _transceiver.SendAsync(request)); Debug.WriteLine($"{nameof(ProcessCommandQueue)}: len: {_commands.Count}, msg: '{request.Message}', timeout {request.Timeout}, success '{response.Success}', resp msg '{response.Message}'"); if (command.Rule.Response != Responses.None) { ReponseReceived(response); } } else { spinWait.SpinOnce(); } } catch (Exception ex) { ExceptionThrown(ex); } } }); }
private async void ProcessCommandQueueAsync() { await Task.Run(async() => { var spinWait = default(SpinWait); while (true) { try { if (!this.commands.IsEmpty && this.commands.TryDequeue(out var command)) { Debug.WriteLine($"{nameof(this.ProcessCommandQueueAsync)}: command queue is {this.commands.Count} deep."); var request = new TelloRequest(command); Debug.WriteLine($"{nameof(this.ProcessCommandQueueAsync)}: request.Message '{request.Message}'"); Debug.WriteLine($"{nameof(this.ProcessCommandQueueAsync)}: request.Timeout '{request.Timeout}'"); var response = new TelloResponse(await this.transceiver.SendAsync(request)); Debug.WriteLine($"{nameof(this.ProcessCommandQueueAsync)}: response.Success '{response.Success}'"); Debug.WriteLine($"{nameof(this.ProcessCommandQueueAsync)}: response.Message '{response.Message}'"); this.ReponseReceived(response); } else { spinWait.SpinOnce(); } } catch (Exception ex) { this.ExceptionThrown(ex); } } }); }