當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart Stream.timeout用法及代碼示例


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