예제 #1
0
        private void ProcessTask(object state)
        {
            RevaleeTask task = (RevaleeTask)state;

            if (!task.AttemptCallback())
            {
                return;
            }

            try
            {
                HttpWebRequest     request      = PrepareWebRequest(task);
                Task <WebResponse> responseTask = Task.Factory.FromAsync <WebResponse>(request.BeginGetResponse, request.EndGetResponse, request);
                responseTask.ContinueWith(t =>
                {
                    HttpWebResponse response = null;
                    try
                    {
                        response = (HttpWebResponse)t.Result;
                        ProcessWebResponse(task, response);
                    }
                    catch (WebException wex)
                    {
                        ProcessWebException(task, wex);
                    }
                    catch (AggregateException aex)
                    {
                        WebException wex = ExtractWebException(aex);

                        if (wex != null)
                        {
                            ProcessWebException(task, wex);
                        }
                        else
                        {
                            // Non-retryable error
                            CompleteFailedTask(task, FormatGenericExceptionMessage(task, aex));
                        }
                    }
                    finally
                    {
                        if (response != null)
                        {
                            response.Close();
                        }
                    }
                });
            }
            catch (WebException wex)
            {
                ProcessWebException(task, wex);
            }
            catch (SecurityException sex)
            {
                // Non-retryable error
                CompleteFailedTask(task, FormatGenericExceptionMessage(task, sex));
            }
        }
예제 #2
0
        private void ProcessTask(object state)
        {
            RevaleeTask task = (RevaleeTask)state;

            if (!task.AttemptCallback())
            {
                return;
            }

            try
            {
                HttpWebRequest     request      = PrepareWebRequest(task);
                Task <WebResponse> responseTask = Task.Factory.FromAsync <WebResponse>(request.BeginGetResponse, request.EndGetResponse, request);
                responseTask.ContinueWith(t =>
                {
                    try
                    {
                        HttpWebResponse response = null;
                        try
                        {
                            response = (HttpWebResponse)t.Result;
                            ProcessWebResponse(task, response);
                        }
                        catch (AggregateException aex)
                        {
                            if (aex.InnerExceptions.Count == 1 && aex.InnerExceptions[0] is WebException)
                            {
                                ProcessWebException(task, aex.InnerExceptions[0] as WebException);
                            }
                            else
                            {
                                aex = aex.Flatten();

                                if (aex.InnerExceptions.Count > 0)
                                {
                                    throw aex.InnerExceptions[0];
                                }
                                else
                                {
                                    throw;
                                }
                            }
                        }
                        finally
                        {
                            if (response != null)
                            {
                                response.Close();
                            }
                        }
                    }
                    catch (WebException wex)
                    {
                        ProcessWebException(task, wex);
                    }
                    catch (AggregateException aex)
                    {
                        // Non-retryable error
                        CompleteFailedTask(task, aex);
                    }
                });
            }
            catch (WebException wex)
            {
                ProcessWebException(task, wex);
            }
            catch (SecurityException sex)
            {
                // Non-retryable error
                CompleteFailedTask(task, sex);
            }
        }