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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。