collect_mirai
waits for the ‘mirai’ to resolve if still in
progress, and returns its value directly. It is a more efifcient version of
and equivalent to call_mirai(x)$data
.
Value
An object (the return value of the ‘mirai’), or a list of such objects (the same length as ‘x’, preserving names).
Details
This function will wait for the asynchronous operation(s) to complete if still in progress (blocking), and is not interruptible.
x[]
may be used to wait for and return the value of a mirai x
,
and is the user-interruptible counterpart to collect_mirai(x)
.
Alternatively
The value of a ‘mirai’ may be accessed at any time at $data
,
and if yet to resolve, an ‘unresolved’ logical NA will be returned
instead.
Using unresolved
on a ‘mirai’ returns TRUE only if it
has yet to resolve and FALSE otherwise. This is suitable for use in control
flow statements such as while
or if
.
Errors
If an error occurs in evaluation, the error message is returned as a
character string of class ‘miraiError’ and ‘errorValue’ (the
stack trace is available at $stack.trace
on the error object).
is_mirai_error
may be used to test for this.
If a daemon crashes or terminates unexpectedly during evaluation, an
‘errorValue’ 19 (Connection reset) is returned (when not using
dispatcher or using dispatcher with retry = FALSE
). Otherwise, using
dispatcher with retry = TRUE
, the mirai will remain unresolved and is
automatically re-tried on the next daemon to connect to the particular
instance. To cancel the task instead, use saisei(force = TRUE)
(see
saisei
).
is_error_value
tests for all error conditions including
‘mirai’ errors, interrupts, and timeouts.
Examples
if (interactive()) {
# Only run examples in interactive R sessions
# using collect_mirai()
df1 <- data.frame(a = 1, b = 2)
df2 <- data.frame(a = 3, b = 1)
m <- mirai(as.matrix(rbind(df1, df2)), df1 = df1, df2 = df2, .timeout = 1000)
collect_mirai(m)
# using x[]
m[]
}