/// <summary>
    /// Check-out the shared anchor.
    /// </summary>
    /// <param name="result">Will be set to true if anchor is checked out by this player</param>
    public IEnumerator CheckOutAnchorAsync()
    {
        CheckoutRequest request;

        lock (currentRequestLock)
        {
            request = currentRequest = CheckoutRequest.CreateNext(currentRequest);
        }

        Debug.LogFormat("[NetworkAnchorPlayer] Making check-out request. {0}", DebugInfo());
        CmdCheckOutAnchor(request.Id);

        bool?checkedOut = null;

        while (!checkedOut.HasValue)
        {
            yield return(null);

            lock (currentRequestLock)
            {
                if (request == currentRequest && request.Success.HasValue)
                {
                    checkedOut = request.Success.Value;
                }
                else if (request != currentRequest)
                {
                    checkedOut = false;
                }
            }
        }

        Debug.LogFormat("[NetworkAnchorPlayer] Done making check-out request. (result: {0}) {1}", CheckedOutAnchor, DebugInfo());

        if (checkedOut.Value)
        {
            lock (checkedOutAnchorCountLock)
            {
                checkedOutAnchorCount++;
            }
        }
    }