Xamarin iOS HttpClient超时不起作用

时间:2018-11-09 15:50:52

标签: xamarin xamarin.forms xamarin.ios timeout httpclient

尽管我们将HTTP框架的默认值设置为3分钟,但在某个时刻,我们发现应用程序中的所有请求在iOS上的超时都为60秒。我尝试了以下代码来确定是否是库出现了问题:

try
{
    using (var http = new HttpClient())
    {
        http.Timeout = TimeSpan.FromMinutes(1.5);
        await http.GetAsync("https://httpstat.us/200?sleep=70000");
    }
}
catch (Exception ex)
{
}

尽管超时设置为90秒,并且请求持续70秒,但此代码因超时异常而失败。事实证明,它不会覆盖默认的60秒超时。相同的代码在新项目上效果很好。

在项目文件中,我们有<MtouchHttpClientHandler>NSUrlSessionHandler</MtouchHttpClientHandler>

1 个答案:

答案 0 :(得分:1)

Xamarin的FUTEX_WAIT使用默认 futex,如果您没有创建自己的NSUrlSessionHandler实例并在其实例中提供自定义NSUrlSessionConfiguration .ctor。

iOS中默认的NSUrlSessionHandler超时设置为60秒。

因此,在您的Xamarin.iOS应用程序项目中,打开AppDelegate.cs并在NSUrlSessionConfiguration覆盖范围内设置默认的会话超时参数。

NSUrlSessionConfiguration
  

timeoutIntervalForRequest

FinishedLaunching
     

timeoutIntervalForResource

NSUrlSessionConfiguration.DefaultSessionConfiguration.TimeoutIntervalForRequest = 90.0;
NSUrlSessionConfiguration.DefaultSessionConfiguration.TimeoutIntervalForResource = 90.0;

re:https://developer.apple.com/documentation/foundation/nsurlsessionconfiguration#//apple_ref/occ/instp/NSURLSessionConfiguration/timeoutIntervalForRequest