public async Task DisposeAsync() { if (disposed) { return; } disposed = true; queue.Add(null); if (subscription != null) { subscription.Dispose(); } // The first await call in this method MUST call ConfigureAwait(false) in order to avoid DEADLOCK when this code is called by synchronize code, like Dispose(). await operationTask.ConfigureAwait(false); operationTask.AssertNotFailed(); ReportInternal("Finished writing all results to server"); long operationId; using (var response = await operationRequest.RawExecuteRequestAsync()) using (var stream = response.GetResponseStream()) using (var streamReader = new StreamReader(stream)) { var result = RavenJObject.Load(new JsonTextReader(streamReader)); operationId = result.Value <long>("OperationId"); } while (true) { if (await IsOperationCompleted(operationId)) { break; } Thread.Sleep(500); } ReportInternal("Done writing to server"); }
public async Task DisposeAsync() { if (disposed) { return; } disposed = true; queue.Add(null); await operationTask; operationTask.AssertNotFailed(); ReportInternal("Finished writing all results to server"); long operationId; using (var response = await operationRequest.RawExecuteRequestAsync()) using (var stream = response.GetResponseStream()) using (var streamReader = new StreamReader(stream)) { var result = RavenJObject.Load(new JsonTextReader(streamReader)); operationId = result.Value <long>("OperationId"); } while (true) { if (await IsOperationCompleted(operationId)) { break; } Thread.Sleep(500); } ReportInternal("Done writing to server"); }