withTimeout<T> function

Future<T> withTimeout<T>(
  1. FutureContext? context,
  2. Duration timeout,
  3. FutureSuspendBlock<T> block
)

指定した context を使用してsuspend関数を実行する. 実行中に context がキャンセルされた場合、この関数は CancellationException を投げて早期終了する. また、指定した timeout が経過した場合は TimeoutException を投げて早期終了する.

contextがnullである場合、空のFutureContextが生成される. 生成された場合は自動的に FutureContext.close がコールされる.

suspend()関数は1コールのオーバーヘッドが大きいため、 内部でキャンセル処理が必要なほど長い場合に利用する.

Implementation

Future<T> withTimeout<T>(
  FutureContext? context,
  Duration timeout,
  FutureSuspendBlock<T> block,
) async {
  final c = context ?? FutureContext();
  try {
    return await c.withTimeout(timeout, block);
  } finally {
    if (context == null) {
      await c.close();
    }
  }
}