private void ThreadProc(CancellationTokenSource cts) { try { while (!cts.IsCancellationRequested) { if (!_sendQueue.IsEmpty && _stream != null) { byte[] message; if (_sendQueue.TryDequeue(out message)) { TcpHelpers.SendMessageAsync(_stream, _sendBufferSize, message, exception => { if (exception != null) { OnException?.Invoke(exception); } else { OnMessageSent?.Invoke(); } }, cts).Wait(); } } System.Threading.Thread.Sleep(1); } cts?.Dispose(); } catch (Exception e) { Log.e("MessageReader Thread Exception: {0}", e.Message); } _thread = null; }