public void Dispose() { items.Add(null); nextTask.ContinueWith(task => { task.AssertNotFailed(); Action <string> report = Report; if (report != null) { report("Finished writing all results to server"); } long id; using (var response = httpJsonRequest.RawExecuteRequest()) using (var stream = response.GetResponseStream()) using (var streamReader = new StreamReader(stream)) { var result = RavenJObject.Load(new JsonTextReader(streamReader)); id = result.Value <long>("OperationId"); } while (true) { var status = client.GetOperationStatus(id); if (status == null) { break; } if (status.Value <bool>("Completed")) { break; } Thread.Sleep(500); } if (report != null) { report("Done writing to server"); } }).Wait(); }