Вопрос

Я пытаюсь вызвать метод EF ToListAsync.Но ничего не произошло - никаких исключений, никакого тайм-аута, просто бег.

Это мой код.

        private IQueryable<Place> placeCompleteQuery;
    protected IQueryable<Place> PlaceCompleteQuery
    {
        get
        {
            return this.placeCompleteQuery ?? (this.placeCompleteQuery = this.Context.Places.Include(p => p.Address).
                Include(p => p.CreatedBy).
                Include(p => p.Source).
                Include(p => p.Type.Translations).
                Include(p => p.Ratings));
        }
    }

    public async Task<IList<Place>> GetPlacesByLocationAsync(DbGeography location, int radius)
    {
        List<Place> temporaryResult = PlaceCompleteQuery.Where(p => p.Location.Distance(location) <= radius).
            ToList();

        return await PlaceCompleteQuery.Where(p => p.Location.Distance(location) <= radius).
            ToListAsync();
    }

Первый вызов синхронизации метода ToList немедленно возвращает результат.Второй асинхронный вызов ToListAsync все еще выполняется без каких-либо результатов и исключений.

Какие-либо предложения?

Это было полезно?

Решение

Я подозреваю, что дальше в стеке вызовов ваш код вызывает Task.Wait или Task<T>.Result.Если вы сделаете это в потоке пользовательского интерфейса или из контекста запроса ASP.NET, ваш код зайдет в тупик, как я объясняю в своем блоге.

Чтобы это исправить, используйте await вместо Task.Wait или Task<T>.Result.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top