先看下代码:
try{
await SecureSocket.connect(remoteIP, remotePort,
timeout: Duration(milliseconds: 500), onBadCertificate: (X509Certificate){
return true;
});
}catch(e){
// timeout
}
虽然设置了500ms的超时参数,但我刚刚遇到了超过500ms依然不抛超时异常的情况,原因未知。虽然这次是服务端故障,但客户端代码在字面理解上不应该出现超时不抛异常的情况。
于是只能再加个Future
自身的timeout
来解决:
try{
await SecureSocket.connect(remoteIP, remotePort,
timeout: Duration(milliseconds: 500), onBadCertificate: (X509Certificate){
return true;
}).timeout(Duration(milliseconds: 500));
} on TimeoutException catch (e) {
// timeout
}catch(e){
// timeout
}
这样在500ms超时就会抛出TimeoutException
。于是connect
中的timeout参数就可有可无了。