Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何管理PostAsync呼叫时引发的AggregateException?_C#_Timeout_Dotnet Httpclient - Fatal编程技术网

C# 如何管理PostAsync呼叫时引发的AggregateException?

C# 如何管理PostAsync呼叫时引发的AggregateException?,c#,timeout,dotnet-httpclient,C#,Timeout,Dotnet Httpclient,我在client.PostAsyc调用时收到AggregateException,即使我已设置长超时 这是我的密码 try { StoresList objlist = new StoresList(); Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; Windows.Storage.Applica

我在client.PostAsyc调用时收到AggregateException,即使我已设置长超时

这是我的密码

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;
}
有人能建议如何处理这个问题吗?有时我会感到异常

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

...

string data = await result.Content.ReadAsStringAsync();
我已经提到以下链接,但我仍然得到错误。事件我已设置超时

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

使用.Result会阻塞线程,您将失去使用异步方法的所有好处

使用wait不仅可以打开数据,还可以打开异常,这样您将获得实际的异常,而不是AggregateException

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

...

string data = await result.Content.ReadAsStringAsync();
虽然有点长,但这里有一个关于使用async/await的好视频:


这值得关注。

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

如果只想在不进行任何处理的情况下检查遇到的异常,可以执行以下操作:

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