【发布时间】:2021-10-07 10:33:35
【问题描述】:
我需要为 http 请求设置超时时间。
我已阅读Set timeout for HTTPClient get() request,它建议我们使用http.get(...).timeout(...)。
但是,我很担心:.timeout 是 Future 类中的一个方法。因此,即使超时,http 请求仍在进行中!换句话说,如果http请求实际上需要30秒才能完成,而我们使用timeout(Duration(seconds: 5)),那么即使看起来我们已经中止了请求,实际上仍然在消耗手机的资源用户的另一个 25 秒。
因此,如果有适当的方法来超时请求,我将不胜感激。或者,如果我错了,请纠正我。
附:我知道还有一件事,HttpClient.connectionTimeout。那是连接阶段,而不是整个请求的时间。有趣的是,当我进入源代码see here时,我发现它内部也使用了some_future.timeout()。因此,恕我直言,资源在超时时也不会释放。
【问题讨论】:
-
或许尝试从
Future.timeout回调中调用HttpClientRequest.abort? -
@jamesdlin 好建议!但我应该怎么称呼它?我正在使用
IOClient。