diff --git a/RestSharp.IntegrationTests/AsyncTests.cs b/RestSharp.IntegrationTests/AsyncTests.cs index 29ef61415..3feed6347 100644 --- a/RestSharp.IntegrationTests/AsyncTests.cs +++ b/RestSharp.IntegrationTests/AsyncTests.cs @@ -168,6 +168,54 @@ public void Handles_GET_Request_Errors_TaskAsync_With_Response_Type() } } + [Fact] + public void Can_Timeout_GET_TaskAsync() + { + const string baseUrl = "http://localhost:8080/"; + using (SimpleServer.Create(baseUrl, Handlers.Generic())) + { + var client = new RestClient(baseUrl); + var request = new RestRequest("timeout", Method.GET).AddBody("Body_Content"); + + //Half the value of ResponseHandler.Timeout + request.Timeout = 500; + + System.AggregateException agg = Assert.Throws( + delegate + { + var task = client.ExecuteTaskAsync(request); + task.Wait(); + }); + + Assert.IsType(typeof(WebException), agg.InnerException); + Assert.Equal("The request timed-out.", agg.InnerException.Message); + } + } + + [Fact] + public void Can_Timeout_PUT_TaskAsync() + { + const string baseUrl = "http://localhost:8080/"; + using (SimpleServer.Create(baseUrl, Handlers.Generic())) + { + var client = new RestClient(baseUrl); + var request = new RestRequest("timeout", Method.PUT).AddBody("Body_Content"); + + //Half the value of ResponseHandler.Timeout + request.Timeout = 500; + + System.AggregateException agg = Assert.Throws( + delegate + { + var task = client.ExecuteTaskAsync(request); + task.Wait(); + }); + + Assert.IsType(typeof(WebException), agg.InnerException); + Assert.Equal("The request timed-out.", agg.InnerException.Message); + } + } + void UrlToStatusCodeHandler(HttpListenerContext obj) { obj.Response.StatusCode = int.Parse(obj.Request.Url.Segments.Last()); diff --git a/RestSharp/Http.Async.cs b/RestSharp/Http.Async.cs index 826703585..50999f349 100644 --- a/RestSharp/Http.Async.cs +++ b/RestSharp/Http.Async.cs @@ -249,7 +249,8 @@ private void RequestStreamCallback(IAsyncResult result, Action cal return; } - webRequest.BeginGetResponse(r => ResponseCallback(r, callback), webRequest); + IAsyncResult asyncResult = webRequest.BeginGetResponse(r => ResponseCallback(r, callback), webRequest); + SetTimeout(asyncResult, _timeoutState); } private void SetTimeout(IAsyncResult asyncResult, TimeOutState timeOutState)