Accessing _result
directly is not thread-safe, and it might have changed since the moment of invocation to the moment when the method returns.
This way we guarantee that completed
and result
are consistent, as well as accessing result
here is fully thread-safe.