public override async Task <byte[]> ReadValueAsyncInternal(ButtplugDeviceReadOptions aOptions, CancellationToken aToken = default(CancellationToken)) { if (!_device.CanRead) { return(new byte[] { }); } var oldTimeout = 0; if (aOptions.Timeout < int.MaxValue) { oldTimeout = _device.ReadTimeout; _device.ReadTimeout = (int)aOptions.Timeout; } //var bytesToRead = _device.Length; var input = new byte[aOptions.ReadLength]; var readLength = 0; try { while (readLength < aOptions.ReadLength) { readLength += await _device.ReadAsync(input, readLength, (int)aOptions.ReadLength - readLength); } } finally { if (aOptions.Timeout < int.MaxValue) { _device.ReadTimeout = oldTimeout; } } return(input); }