done property
Completes with the outcome; never throws.
Reading it marks the job observed, so nobody is asked to answer for a
Failed outcome: the one reading has it. Any read counts, a print or
a debugger's watch on the getter as well.
Implementation
@override
Future<Outcome<T>> get done {
_observed = true;
return _done.future;
}