public static Task <T> AsTask <T> (this IFuture future, CancellationToken token = default(CancellationToken)) where T : class, IJavaObject { var tcs = new TaskCompletionSource <T> (); future.SetCallback(new TaskFutureCallback <T> (tcs, future)); token.Register(() => { future.Cancel(); }); return(tcs.Task); }