public void SubmitBatchAndWait(IBatchRequest batch, bool urgent) { int completed = 0; Dictionary <IRequest, BaseRequest.RequestCompletedCallback> callbacks = new Dictionary <IRequest, BaseRequest.RequestCompletedCallback>(); ManualResetEvent mre = new ManualResetEvent(false); foreach (IRequest req in batch.Requests) { BaseRequest.RequestCompletedCallback _callback = req.RequestCompleteCallback; callbacks.Add(req, _callback); req.RequestCompleteCallback = delegate(IRequest r) { completed++; callbacks[r](r); if (completed >= batch.Requests.Count) { mre.Set(); } }; SubmitRequest(req, false); } mre.WaitOne(); }
/// <summary> /// Submits the specified request and then blocks the calling thread until it completes. /// </summary> /// <param name="req"></param> /// <param name="urgent"></param> public void SubmitAndWait(IRequest req, bool urgent) { BaseRequest.RequestCompletedCallback _callback = req.RequestCompleteCallback; bool requestComplete = false; req.RequestCompleteCallback = delegate(IRequest r) { requestComplete = true; }; SubmitRequest(req, urgent); while (!requestComplete) { Thread.Sleep(1); } if (_callback != null) { _callback(req); } }