dart:async
库中Stream.timeout
方法的用法介绍如下。
用法:
Stream<T> timeout(
Duration timeLimit,
{void onTimeout(
EventSink<T> sink
)?}
)
使用与此流相同的事件创建一个新流。
当有人正在侦听返回的流并且超过 timeLimit
传递而此流没有发出任何事件时,将调用 onTimeout
函数,然后该函数可以在返回的流上发出更多事件。
倒计时在侦听返回的流时开始,并在发出来自此流的事件时重新开始,或者在侦听返回的流时暂停和恢复。暂停或取消侦听返回的流时,倒计时停止。当倒计时完成并调用 onTimeout
函数时,即使发出事件,也不会开始新的倒计时。如果该流的事件之间的延迟为多次 timeLimit
,则事件之间最多会发生一次超时。
onTimeout
函数使用一个参数调用:EventSink,它允许将事件放入返回的流中。此 EventSink
仅在调用 onTimeout
期间有效。在传递给 onTimeout
的接收器上调用 EventSink.close 将关闭返回的流,并且不再处理任何事件。
如果省略onTimeout
,超时将向返回流的错误通道发出TimeoutException。如果对onTimeout
的调用抛出,则错误将作为返回流上的错误发出。
如果此流是,则返回的流是广播流。如果一个广播流被多次收听,每个订阅将有其单独的计时器,开始计数,并且订阅的计时器可以单独暂停。
例子:
Future<String> waitTask() async {
return await Future.delayed(
const Duration(seconds: 4), () => 'Complete');
}
final stream = Stream<String>.fromFuture(waitTask())
.timeout(const Duration(seconds: 2), onTimeout: (controller) {
print('TimeOut occurred');
controller.close();
});
stream.listen(print, onDone: () => print('Done'));
// Outputs:
// TimeOut occurred
// Done
相关用法
- Dart Stream.take用法及代码示例
- Dart Stream.transform用法及代码示例
- Dart Stream.takeWhile用法及代码示例
- Dart Stream.fromFutures用法及代码示例
- Dart Stream.fold用法及代码示例
- Dart Stream.map用法及代码示例
- Dart Stream.asBroadcastStream用法及代码示例
- Dart Stream.handleError用法及代码示例
- Dart Stream.where用法及代码示例
- Dart Stream.reduce用法及代码示例
- Dart Stream.join用法及代码示例
- Dart Stream.error用法及代码示例
- Dart Stream.periodic用法及代码示例
- Dart Stream.every用法及代码示例
- Dart Stream.lastWhere用法及代码示例
- Dart Stream.contains用法及代码示例
- Dart Stream.eventTransformed用法及代码示例
- Dart Stream.firstWhere用法及代码示例
- Dart Stream.drain用法及代码示例
- Dart Stream.empty用法及代码示例
- Dart Stream.multi用法及代码示例
- Dart Stream.distinct用法及代码示例
- Dart Stream.singleWhere用法及代码示例
- Dart Stream.fromFuture用法及代码示例
- Dart Stream.skipWhile用法及代码示例
注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 timeout method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。