public interface Task<T> extends com.google.common.util.concurrent.ListenableFuture<T>, TaskAdaptable<T>
ExecutionManager
or ExecutionContext
it will record submission time,
execution start time, end time, and any result. A task can be submitted to the ExecutionManager or
ExecutionContext, in which case it will be returned, or it may be created by submission
of a Runnable
or Callable
and thereafter it can be treated just like a Future
.Modifier and Type | Method and Description |
---|---|
void |
blockUntilEnded()
Causes calling thread to block until the task is ended.
|
boolean |
blockUntilEnded(Duration timeout)
As
blockUntilEnded() , but returning after the given timeout;
true if the task has ended and false otherwise |
void |
blockUntilStarted()
Causes calling thread to block until the task is started.
|
boolean |
cancel(boolean mayInterruptIfRunning)
As
Future.cancel(boolean) . |
T |
get(Duration duration)
As
Future.get(long, java.util.concurrent.TimeUnit) |
java.lang.String |
getDescription() |
java.lang.String |
getDisplayName() |
long |
getEndTimeUtc()
if
Future.isDone() (for any reason) returns the time when the task ended;
guaranteed to be >= getStartTimeUtc() > 0 if ended, or -1 otherwise |
java.lang.String |
getId() |
long |
getStartTimeUtc()
if
isBegun() returns the time when the task was starts;
guaranteed to be >= getSubmitTimeUtc() > 0 if started, or -1 otherwise |
java.lang.String |
getStatusDetail(boolean multiline)
Returns detailed status, suitable for a hover.
|
java.lang.String |
getStatusSummary() |
Task<?> |
getSubmittedByTask()
task which submitted this task, if was submitted by a task
|
long |
getSubmitTimeUtc()
if
isSubmitted() returns the time when the task was submitted; or -1 otherwise |
java.util.Set<java.lang.Object> |
getTags() |
java.lang.Thread |
getThread()
The thread where the task is running, if it is running.
|
T |
getUnchecked()
As
Future.get() , but propagating checked exceptions as unchecked for convenience. |
T |
getUnchecked(Duration duration)
As
Future.get() , but propagating checked exceptions as unchecked for convenience
(including a TimeoutException if the duration expires) |
boolean |
isBegun()
Whether task has started running.
|
boolean |
isError()
Whether the task threw an error, including cancellation (implies
Future.isDone() ) |
boolean |
isSubmitted()
Whether task has been submitted
Submitted tasks are normally expected to start running then complete,
but unsubmitted tasks are sometimes passed around for someone else to submit them.
|
asTask
java.lang.String getId()
java.util.Set<java.lang.Object> getTags()
long getSubmitTimeUtc()
isSubmitted()
returns the time when the task was submitted; or -1 otherwiselong getStartTimeUtc()
isBegun()
returns the time when the task was starts;
guaranteed to be >= getSubmitTimeUtc()
> 0 if started, or -1 otherwiselong getEndTimeUtc()
Future.isDone()
(for any reason) returns the time when the task ended;
guaranteed to be >= getStartTimeUtc()
> 0 if ended, or -1 otherwisejava.lang.String getDisplayName()
java.lang.String getDescription()
Task<?> getSubmittedByTask()
java.lang.Thread getThread()
boolean isSubmitted()
boolean isBegun()
boolean isError()
Future.isDone()
)void blockUntilStarted()
void blockUntilEnded()
Either normally or by cancellation or error, but without throwing error on cancellation or error. (Errors are logged at debug.)
boolean blockUntilEnded(Duration timeout)
blockUntilEnded()
, but returning after the given timeout;
true if the task has ended and false otherwisejava.lang.String getStatusSummary()
java.lang.String getStatusDetail(boolean multiline)
T get(Duration duration) throws java.lang.InterruptedException, java.util.concurrent.ExecutionException, java.util.concurrent.TimeoutException
Future.get(long, java.util.concurrent.TimeUnit)
java.lang.InterruptedException
java.util.concurrent.ExecutionException
java.util.concurrent.TimeoutException
T getUnchecked()
Future.get()
, but propagating checked exceptions as unchecked for convenience.T getUnchecked(Duration duration)
Future.get()
, but propagating checked exceptions as unchecked for convenience
(including a TimeoutException
if the duration expires)boolean cancel(boolean mayInterruptIfRunning)
Future.cancel(boolean)
. Note that Future.isDone()
and blockUntilEnded(Duration)
return immediately
once a task is cancelled, consistent with the underlying FutureTask
behaviour.
TODO Fine-grained control over underlying jobs, e.g. to ensure anything represented by this task is actually completed,
is not (yet) publicly exposed. See the convenience method blockUntilInternalTasksEnded in the Tasks set of helpers
for more discussion.cancel
in interface java.util.concurrent.Future<T>