public async Task <byte> RegReadAsync(UInt16 address) { const int TIMEOUT_MS = 6000; var cmd = _bglib.BLECommandSystemRegRead(address); await _bglib.SendCommandAsync(cmd).ConfigureAwait(false); using (var cts = new CancellationTokenSource(TIMEOUT_MS)) { bool didTimeout = false; try { await _cmdRespWaitHandle.WaitAsync(cts.Token).ConfigureAwait(false); } catch (OperationCanceledException) { didTimeout = true; } if (didTimeout) { throw new TimeoutException(); } } byte value = ((RegReadEventArgs)_lastResponseArgs).value; return(value); }