【Dart】不靠谱的连接超时参数

先看下代码:

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参数就可有可无了。

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注