Make the run method generic
diff --git a/example/runner_pool.dart b/example/runner_pool.dart
index cb08da2..efb81e5 100644
--- a/example/runner_pool.dart
+++ b/example/runner_pool.dart
@@ -40,7 +40,7 @@
if (i < limit) {
schedule(a + b, a, i + 1);
}
- fibs[i] = pool.run(fib, i, load: a);
+ fibs[i] = pool.run<int, int>(fib, i, load: a);
}
schedule(0, 1, 0);
diff --git a/lib/isolate_runner.dart b/lib/isolate_runner.dart
index da518f3..55bb759 100644
--- a/lib/isolate_runner.dart
+++ b/lib/isolate_runner.dart
@@ -184,7 +184,8 @@
/// } finally {
/// await iso.close();
/// }
- Future run(function(argument), argument, {Duration timeout, onTimeout()}) {
+ Future<R> run<R, P>(R function(P argument), P argument,
+ {Duration timeout, onTimeout()}) {
return singleResultFuture((SendPort port) {
_commandPort.send(list4(_RUN, function, argument, port));
}, timeout: timeout, onTimeout: onTimeout);
diff --git a/lib/load_balancer.dart b/lib/load_balancer.dart
index cd7c193..631d89b 100644
--- a/lib/load_balancer.dart
+++ b/lib/load_balancer.dart
@@ -69,7 +69,7 @@
/// If [timeout] and [onTimeout] are provided, they are forwarded to
/// the runner running the function, which will handle a timeout
/// as normal.
- Future run(function(argument), argument,
+ Future<R> run<R, P>(R function(P argument), argument,
{Duration timeout, onTimeout(), int load: 100}) {
RangeError.checkNotNegative(load, "load");
_LoadBalancerEntry entry = _first;
@@ -265,10 +265,10 @@
/// Whether the entry is still in the queue.
bool get inQueue => queueIndex >= 0;
- Future run(LoadBalancer balancer, int load, function(argument), argument,
- Duration timeout, onTimeout()) {
+ Future<R> run<R, P>(LoadBalancer balancer, int load, R function(P argument),
+ argument, Duration timeout, onTimeout()) {
return runner
- .run(function, argument, timeout: timeout, onTimeout: onTimeout)
+ .run<R, P>(function, argument, timeout: timeout, onTimeout: onTimeout)
.whenComplete(() {
balancer._decreaseLoad(this, load);
});
diff --git a/lib/runner.dart b/lib/runner.dart
index 018dcd8..a8a848c 100644
--- a/lib/runner.dart
+++ b/lib/runner.dart
@@ -35,7 +35,7 @@
/// complete with a [TimeoutException].
///
/// The default implementation runs the function in the current isolate.
- Future run(function(argument), Object argument,
+ Future<R> run<R, P>(R function(P argument), P argument,
{Duration timeout, onTimeout()}) {
Future result = new Future.sync(() => function(argument));
if (timeout != null) {