Changed the way we create future objects to stay compatible with
new versions of {future}. Apparently the way we were doing
it was never idiomatic and only worked by accident. (#121)
Fixed #122: Use future::future(..., lazy = TRUE) to
avoid manual capturing of state within future_promise
(Thank you, @HenrikBengtsson! #123)
is.promising is now an S3 method. (#104)future_promise() received a speed improvement when
submitting many requests with a minimal number of {future}
workers. If future_promise() runs out of available
{future} workers, then future_promise() will
preemptively return for the remainder of the current
{later} execution. While it is possible for
{future} to finish a job before submitting all of the
future_promise() requests, the time saved by not asking
{future}’s worker availability will be faster overall than
if a few jobs were submitted early. (#78)
Fixed #86: future_promise() spuriously reports
unhandled errors. (#90)
Move {fastmap} from Suggests to
Imports for better {renv} discovery.
(#87)
Added future_promise() which returns a
promise that executes the expression using
future::future(). future_promise() should
(typically) be a drop-in replacement for any
future::future() function call.
future_promise() will not execute future work
faster than future::future(), but
future_promise() will only submit future jobs
if a worker is available. If no workers are available,
future_promise() will hold the expression information in a
promise until a worker does become available to better take
advantage of computing resources available to the main R session. For
more information, please see the future_promise()
article. (#62)
Added visibility support for
Promise$then(onFulfilled). (#59)
future::resolved()
and future::value() by discarding the corrupt future.
(#37)Fixed #49: promise_all() previously did not handle
NULL values correctly. (#50))
new_promise_domain now takes a
wrapOnFinally argument, which can be used to intercept
registration of finally(). Previous versions treated
finally as passing the same callback to
then(onFulfilled=..., onRejected=...), and ignoring the
result; for backward compatibility, promise domains will still treat
finally that way by default (i.e. if
wrapOnFinally is NULL, then
finally will result in wrapOnFulfilled and
wrapOnRejected being called, but if
wrapOnFinally is provided then only
wrapOnFinally will be called). (#43)