Is there a way to prevent double-tracking in the case of passing along errors?  For example (pseudocoding):

```java
fooAsync().continueWithTask((Task t) -> {
  if (t.getError() != null) {
    return Task.fromError(t.getError());
  }
  return Task.fromResult(doSomething(t.getResult()));
}
```

In the case of an error, it seems like this will get the logical stack twice.