private async Task <TimedOperation <ScanResults> > ExecuteScan(ReadRowsRequest scanRequest) { try { return(await new TimedOperation <ScanResults>().MeasureAsync(async() => { var service = new BigtableService.BigtableServiceClient(_channel); var results = new ScanResults(); using (var scanResults = service.ReadRows(scanRequest)) using (var responseStream = scanResults.ResponseStream) { while (await responseStream.MoveNext()) { AccumulateRows(responseStream.Current, results); } } return results; })); } catch (Exception exception) { ReportServiceFault(exception); throw; } }
// Used by all read signatures including observables private async Task <IAsyncEnumerator <ReadRowsResponse> > ReadRows(ReadRowsRequest request, CancellationToken cancellationToken = default(CancellationToken)) { // Read rows with native client var response = _client.ReadRows(request, cancellationToken: cancellationToken); // Wait for response to have started await response.ResponseHeadersAsync; // Return the response stream return(response.ResponseStream); }