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 the returned future does not complete before timeLimit
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, a timeout will cause the returned future to
complete with a TimeoutException
.
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;
}