public async Task <IBleResult <TOut> > ReadAsync(IParametrizedReaderBehavior <TIn, TOut> parametrizedReader, TIn parameter, CancellationToken cancellationToken) { IBleResult <TOut> result; try { if (_connector.IsConnected) { result = await parametrizedReader.ReadAsync(parameter, cancellationToken).ConfigureAwait(false); } else { var connectionResult = await _connector.ConnectAsync(cancellationToken); if (connectionResult.IsOperationCompleted) { cancellationToken.ThrowIfCancellationRequested(); result = await parametrizedReader.ReadAsync(parameter, cancellationToken); } else { result = BleResult.Failure <TOut>(BleFailure.DeviceNotConnected, connectionResult); } } } catch (OperationCanceledException) { result = BleResult.Failure <TOut>(BleFailure.OperationCancelled); } return(result); }
public Task <IBleResult <TOut> > ReadAsync(IParametrizedReaderBehavior <TIn, TOut> parametrizedReader, TIn parameter, CancellationToken cancellationToken) { return(_executor.TimeoutBleOperationAsync(ct => parametrizedReader.ReadAsync(parameter, ct), _timeout, cancellationToken)); }