in Bolts/src/bolts/Task.java [503:532]
private static <TContinuationResult, TResult> void completeAfterTask(
final Task<TContinuationResult>.TaskCompletionSource tcs,
final Continuation<TResult, Task<TContinuationResult>> continuation,
final Task<TResult> task, final Executor executor) {
executor.execute(new Runnable() {
public void run() {
try {
Task<TContinuationResult> result = continuation.then(task);
if (result == null) {
tcs.setResult(null);
} else {
result.continueWith(new Continuation<TContinuationResult, Void>() {
public Void then(Task<TContinuationResult> task) {
if (task.isCancelled()) {
tcs.setCancelled();
} else if (task.isFaulted()) {
tcs.setError(task.getError());
} else {
tcs.setResult(task.getResult());
}
return null;
}
});
}
} catch (Exception e) {
tcs.setError(e);
}
}
});
}