run<R, P> method
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;
}