internal virtual WebResponse GetResponse(WebRequest request) { if (request == null) { throw new ArgumentNullException("request"); } HttpWebRequest request2 = request as HttpWebRequest; TimeoutState state = null; if ((request2 != null) && (request2.Timeout > 0)) { state = new TimeoutState(request2); } this._webRequest = request; WebRequestState state2 = new WebRequestState(request); IAsyncResult result = request.BeginGetResponse(new AsyncCallback(WebRequestPSCmdlet.ResponseCallback), state2); if (state != null) { ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(WebRequestPSCmdlet.TimeoutCallback), state, state.httpRequest.Timeout, true); } state2.waithandle.WaitOne(-1, false); this._webRequest = null; if (state2.webException == null) { return(state2.response); } if (((state != null) && state.abort) && state2.webException.Status.Equals(WebExceptionStatus.RequestCanceled)) { throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout); } throw state2.webException; }
public static void Register(WaitHandle handle, Action <HttpTransportAsyncResult, bool> callback, HttpTransportAsyncResult value, TimeSpan timeout) { value.TimeoutStarted = DateTime.UtcNow.TimeOfDay; var x = new TimeoutState(handle, callback, value); var h = ThreadPool.RegisterWaitForSingleObject(handle, TimeoutState.StaticWaitOrTimerCallback, x, timeout, true); x.Registered = h; }
internal virtual WebResponse GetResponse(WebRequest request) { if (null == request) { throw new ArgumentNullException("request"); } // Construct TimeoutState HttpWebRequest httpRequest = request as HttpWebRequest; TimeoutState timeoutState = null; if (httpRequest != null && httpRequest.Timeout > 0) { timeoutState = new TimeoutState(httpRequest); } // Construct WebRequestState _webRequest = request; WebRequestState requestState = new WebRequestState(request); // Call asynchronous GetResponse IAsyncResult asyncResult = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(ResponseCallback), requestState); // Set timeout if necessary if (timeoutState != null) { ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), timeoutState, timeoutState.httpRequest.Timeout, true); } // Wait on signal requestState.waithandle.WaitOne(-1, false); requestState.waithandle.Close(); _webRequest = null; // The current thread will be waked up in three cases: // 1. the EngGetResponse is done. In this case, we EITHER get the response (requestState.response != null), // OR a WebException is raised (requestState.webException != null). // 2. the ^C is typed, a PipelineStoppedException is raised. StopProcessing will abort the request. In this // case, there will be a WebException with status 'RequestCancelled'. // 3. the time is up. The TimeoutCallback method will abort the request. In this case, there will also be a // WebException with status 'RequestCancelled' and timeoutState.abort will be true. if (requestState.webException != null) { // Case 3. We wrap the exception to be 'Timeout' WebException if (timeoutState != null && timeoutState.abort && requestState.webException.Status.Equals(WebExceptionStatus.RequestCanceled)) { throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout); } // Case 1 or 2 throw requestState.webException; } return(requestState.response); }
/// <summary> /// Call back method for timeout /// </summary> /// <param name="state"></param> /// <param name="timeout"></param> private static void TimeoutCallback(object state, bool timeout) { if (timeout) { TimeoutState timeoutState = state as TimeoutState; if (timeoutState != null) { timeoutState.abort = true; timeoutState.httpRequest.Abort(); } } }
private static void TimeoutCallback(object state, bool timeout) { if (timeout) { TimeoutState state2 = state as TimeoutState; if (state2 != null) { state2.abort = true; state2.httpRequest.Abort(); } } }
protected void WaitOrTimeout(object state, bool isTimeout) { try { if (isTimeout) { TimeoutState waitOrTimeoutState = state as TimeoutState; if (null != cancelCallback) { cancelCallback(waitOrTimeoutState.state); } else { waitOrTimeoutState.thread.Abort(); } } } catch { } }
public IAsyncResult BeginInvoke(object arg, AsyncCallback asyncCallback, object state, int timeout) { wrapper = delegate(object argv) { AutoResetEvent e = new AutoResetEvent(false); try { TimeoutState waitOrTimeoutState = new TimeoutState(Thread.CurrentThread, state); ThreadPool.RegisterWaitForSingleObject(e, WaitOrTimeout, waitOrTimeoutState, timeout, true); return(workCallback(argv)); } finally { e.Set(); } }; IAsyncResult asyncResult = wrapper.BeginInvoke(arg, asyncCallback, state); return(asyncResult); }
public override void OnInit(string gameStarter, string[] userlist, string[] param) { _super = param[0] == "superuno"; // Check if playing Uno or SuperUno _state = new State( delegate(string tx) { SendOut(tx); }, delegate(string tg, string tx) { SendOut(tg, tx); }, _super ); _inState = InputState.Recruit; _timeoutState = TimeoutState.InactiveWarn1; _top = _state.DrawDeck.Draw(); _state.DiscardPile.Add(_top); Player ps = _state.Players.Add(gameStarter); SetTopic(Messages.TopicRecruit); SendOut(String.Format(Messages.OutGameStart, ps, Name)); }
/// <summary> /// 开始调用委托 /// </summary> /// <param name="arg"></param> /// <param name="asyncCallback"></param> /// <param name="state"></param> /// <param name="timeout"></param> /// <returns></returns> public IAsyncResult BeginInvoke(object arg, AsyncCallback asyncCallback, object state, int timeout) { wrapper = delegate(object argv) { AutoResetEvent e = new AutoResetEvent(false); try { TimeoutState waitOrTimeoutState = new TimeoutState(Thread.CurrentThread, state); ThreadPool.RegisterWaitForSingleObject(e, WaitOrTimeout, waitOrTimeoutState, timeout, true); return workCallback(argv); } finally { e.Set(); } }; IAsyncResult asyncResult = wrapper.BeginInvoke(arg, asyncCallback, state); return asyncResult; }
public Task Timeout(TimeoutState state, IMessageHandlerContext context) { throw new NotImplementedException(); }
internal virtual WebResponse GetResponse(WebRequest request) { if (request == null) { throw new ArgumentNullException("request"); } HttpWebRequest request2 = request as HttpWebRequest; TimeoutState state = null; if ((request2 != null) && (request2.Timeout > 0)) { state = new TimeoutState(request2); } this._webRequest = request; WebRequestState state2 = new WebRequestState(request); IAsyncResult result = request.BeginGetResponse(new AsyncCallback(WebRequestPSCmdlet.ResponseCallback), state2); if (state != null) { ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, new WaitOrTimerCallback(WebRequestPSCmdlet.TimeoutCallback), state, state.httpRequest.Timeout, true); } state2.waithandle.WaitOne(-1, false); this._webRequest = null; if (state2.webException == null) { return state2.response; } if (((state != null) && state.abort) && state2.webException.Status.Equals(WebExceptionStatus.RequestCanceled)) { throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout); } throw state2.webException; }
public void Timeout(TimeoutState state) { Log.Warn("Sending CheckFileImportSuccessAndFailureCount."); SendCheckFileImportSuccessAndFailureCount(Data.ImportId); }
internal virtual WebResponse GetResponse(WebRequest request) { if (null == request) { throw new ArgumentNullException("request"); } // Construct TimeoutState HttpWebRequest httpRequest = request as HttpWebRequest; TimeoutState timeoutState = null; if (httpRequest != null && httpRequest.Timeout > 0) { timeoutState = new TimeoutState(httpRequest); } // Construct WebRequestState _webRequest = request; WebRequestState requestState = new WebRequestState(request); // Call asynchronous GetResponse IAsyncResult asyncResult = (IAsyncResult)request.BeginGetResponse(new AsyncCallback(ResponseCallback), requestState); // Set timeout if necessary if (timeoutState != null) { ThreadPool.RegisterWaitForSingleObject(asyncResult.AsyncWaitHandle, new WaitOrTimerCallback(TimeoutCallback), timeoutState, timeoutState.httpRequest.Timeout, true); } // Wait on signal requestState.waithandle.WaitOne(-1, false); requestState.waithandle.Close(); _webRequest = null; // The current thread will be waked up in three cases: // 1. the EngGetResponse is done. In this case, we EITHER get the response (requestState.response != null), // OR a WebException is raised (requestState.webException != null). // 2. the ^C is typed, a PipelineStoppedException is raised. StopProcessing will abort the request. In this // case, there will be a WebException with status 'RequestCancelled'. // 3. the time is up. The TimeoutCallback method will abort the request. In this case, there will also be a // WebException with status 'RequestCancelled' and timeoutState.abort will be true. if (requestState.webException != null) { // Case 3. We wrap the exception to be 'Timeout' WebException if (timeoutState != null && timeoutState.abort && requestState.webException.Status.Equals(WebExceptionStatus.RequestCanceled)) { throw new WebException(WebCmdletStrings.RequestTimeout, WebExceptionStatus.Timeout); } // Case 1 or 2 throw requestState.webException; } return (requestState.response); }