尽管我们将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>
答案 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;