Pergunta

Tento chamar o método EF ToListAsync.Mas nada aconteceu - nenhuma exceção, nenhum tempo limite, apenas em execução.

Este é o meu código.

        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();
    }

A primeira chamada de sincronização do método ToList retorna o resultado imediatamente.A segunda chamada assíncrona de ToListAsync ainda está em execução sem resultado nem exceção.

Alguma sugestão?

Foi útil?

Solução

Suspeito que mais acima na sua pilha de chamadas, seu código está chamando Task.Wait ou Task<T>.Result.Se você fizer isso no thread da interface do usuário ou em um contexto de solicitação do ASP.NET, seu código irá travar, como explico no meu blog.

Para consertar, use await em vez de Task.Wait ou Task<T>.Result.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top