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.