run<R, P> method

Future<R> run<R, P>(
  1. FutureOr<R> function(
    1. P argument
    ),
  2. P argument, {
  3. Duration? timeout,
  4. FutureOr<R> onTimeout()?,
})

Request that function be called with the provided arguments.

The arguments will be applied to the function in the same way as by Function.apply, but it may happen in a different isolate or setting.

It's necessary that the function can be sent through a SendPort if the call is performed in another isolate. That means the other isolate should be created using Isolate.spawn so that it is running the same code as the sending isolate, and the function must be a static or top-level function.

Waits for the result of the call, and completes the returned future with the result, whether it's a value or an error.

If timeout is provided, and the returned future does not complete before that duration has passed, the onTimeout action is executed instead, and its result (whether it returns or throws) is used as the result of the returned future. If onTimeout is omitted, it defaults to throwing aTimeoutException.

The default implementation runs the function in the current isolate.

Implementation

Future<R> run<R, P>(FutureOr<R> Function(P argument) function, P argument,
    {Duration? timeout, FutureOr<R> Function()? onTimeout}) {
  var result = Future.sync(() => function(argument));
  if (timeout != null) {
    result = result.timeout(timeout, onTimeout: onTimeout);
  }
  return result;
}