6

Besides sync vs async, the differences in their documentation is confusing to me. The examples on their github page still look like the continuations are being called synchronously.

continueWith() Adds a synchronous continuation to this task, returning a new task that completes after the continuation has finished running.

continueWithTask() Adds an asynchronous continuation to this task, returning a new task that completes after the task returned by the continuation has completed.

Jeff Engebretsen
  • 666
  • 2
  • 8
  • 21

1 Answers1

5

When you have helper methods that return a Task object, you cannot use continueWith() or onSuccess() because the Bolts code won't treat it as a Task and wait for its execution. It would treat the Task as a simple data result.

Basically, this won't work, because the resulting task of this chain is a Task<Task<Void>>:

update().onSuccess(new Continuation<ParseObject, Task<Void>>()
{
  public Task<Void> then(Task<ParseObject> task) throws Exception
  {
    return Task.delay(3000);
  }
}) // this end returns a Task<Task<Void>>

But this will work and the chain will return a Task<Void>:

update().onSuccessTask(new Continuation<ParseObject, Task<Void>>()
{
  public Task<Void> then(Task<ParseObject> task) throws Exception
  {
    return Task.delay(3000);
  }
}) // this end returns a Task<Void>
ByteWelder
  • 5,464
  • 1
  • 38
  • 45