PostAsync调用时,如何管理正在引发的AggregateException



我在客户端时收到AggregateException。PostAsyc呼叫连我都设置了长超时。

这是我的密码。

try
{
    StoresList objlist = new StoresList();
    Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
    Windows.Storage.ApplicationDataContainer session = Windows.Storage.ApplicationData.Current.RoamingSettings;
    var contents = new FormUrlEncodedContent(new[] 
        {
            new KeyValuePair<string, string>("userapi", session.Values["userapi"].ToString()),
            new KeyValuePair<string, string>("keyapi", session.Values["keyapi"].ToString()),
            new KeyValuePair<string, string>("notification_flag","1"),                 
            new KeyValuePair<string, string>("token", localSettings.Values["deviceid"].ToString()),
        });
    using (var client = new HttpClient()  { Timeout = TimeSpan.FromMinutes(4) } )
    {
        var result = client.PostAsync(session.Values["URL"] + "/abcd/", contents).Result;
        if (result.IsSuccessStatusCode)
        {
            string data = result.Content.ReadAsStringAsync().Result;
            if (data.Contains("activate") || data.Contains("enable"))
            {
                //Please activate the Mobile Assistant Extension 
                return null;
            }
            if (data != null)
            {
                List<Stores> objStores = JsonConvert.DeserializeObject<LoginResponse>(data).stores;
                foreach (var item in objStores)
                {
                    Stores objs = new Stores();
                    {
                        objs.id = item.id;
                        objs.name = item.name;
                        objlist.Add(objs);
                    }
                }
            }
        }
    }
    return objlist;
}
catch (Exception ex)
{
    throw ex;
    return null;
}

有人能建议如何处理这个问题吗?有时我会收到AggregateException。

我已经参考了下面的链接,但我仍然有错误。事件我已设置超时。

如何判断HttpClient何时超时?

AggregateException在等待PostAsJsonAsync 时引发

HttpClient.Timeout和使用WebRequestHandler超时属性有什么区别?

async添加到方法定义中,并使用await而不是.Result

使用.Result会阻塞线程,并且您将失去使用Async方法的所有弯曲。

使用await不仅会"打开"数据,还会打开异常(因此您将获得实际的异常,而不是AggregateException)。

var result = await client.PostAsync(session.Values["URL"] + "/abcd/", contents);
...
string data = await result.Content.ReadAsStringAsync();

它有点长,但这里有一个关于使用async/await的好视频:https://channel9.msdn.com/Events/aspConf/aspConf/Async-in-ASP-NET

值得一看。

AggregateException是执行异步任务时遇到的所有异常的集合。

如果你只想在不做任何处理的情况下检查遇到的异常是什么,你可以做这样的事情:

catch (AggregateException ae)
{
    // This will just throw the first exception, which might not explain everything/show the entire trace.
    throw ae.InnerException
}

catch (AggregateException ae)
{
    // This will flatten the entire exception stack to a string.
    throw new Exception(ae.ToString())
}

相关内容

  • 没有找到相关文章

最新更新