Q: Вызов вложенных async методов internal async Task<Something> InitSomethingAsync()
{
    return await _some.SetSomethingFlags(SomethingtFlagsAsync(_sportDataDays));
}


public async Task<EventPropertiesFilter> SetSomethingFlags(Task<HashSet<ValueTuple<long, int>>> paramTask)
{
    _fieldValue = _fieldValue ?? await paramTask;
    return this;
}


public async Task<HashSet<ValueTuple<long, int>>> SomethingtFlagsAsync()
{
    return await _cache.GetCacheItemAsync<HashSet<ValueTuple<long, int>>>(async () => await GetSomething());
}

Внутри GetCacheItemAsync используется 'copy-past' реализация SemaphorSlim, _useCount которого будет равен 1 если метод SetSomething вызывать два раза, ибо _fieldValue уже проинициализировано. Т.е занятый семафор будет в таком состоянии до завершения запроса. Не очень понятна причина.
Семафор используется в рамках using блока и если я правильно понимаю реализацию, то по окончанию этого блока, семафор должен быть удален из общего словаря:
private void Release(SemaphoreWrapper wrapper)    
{   
    lock (_lock)  
    {
        var isEmpty = wrapper.Release();

        if (!isEmpty) 

            return; 

        _wrapperMap.Remove(wrapper.Key);
    }
}


UPD. Сомнительное условие и прочий код был переписан, но тем не менее хотелось бы иметь больше понимания о возникшей проблеме.
