private async Task <IBleResult <IReadOnlyList <IDevice> > > ExecuteDeviceSearchAsync(IDeviceFilter deviceFilter, bool stopAfterFirstResult, CancellationToken cancellationToken) { IBleResult <IReadOnlyList <IDevice> > result = null; try { await _searchSemaphore.WaitAsync(cancellationToken).ConfigureAwait(false); try { var searchResult = await _bleAdapter.SearchAsync(deviceFilter, stopAfterFirstResult, _executor, _logger, cancellationToken); result = BleResult.Success(searchResult); } finally { _searchSemaphore.Release(); } } catch (OperationCanceledException) { } catch (Exception e) { result = BleResult.Failure <IReadOnlyList <IDevice> >(e); } return(result); }
public async Task <IBleResult> WriteAsync(IWriterBehavior <TIn> writer, TOut value, CancellationToken cancellationToken) { IBleResult result = null; try { using (var rawDataSequenceEnumerator = _valueConverter.Invoke(value).GetEnumerator()) { while (rawDataSequenceEnumerator.MoveNext() && result == null) { cancellationToken.ThrowIfCancellationRequested(); var writeChunkResult = await writer.WriteAsync(rawDataSequenceEnumerator.Current, cancellationToken).ConfigureAwait(false); if (!writeChunkResult.IsOperationCompleted) { result = writeChunkResult; } } } result = result ?? BleResult.Success(); } catch (OperationCanceledException) { result = BleResult.Failure(BleFailure.OperationCancelled); } catch (Exception e) { result = BleResult.Failure(e); } return(result); }
public static IBleResult Failure(BleFailure failureCause, IBleResult nestedFailure) { return(new BleResultImpl(failureCause, null, nestedFailure)); }