Question

J'essaie d'appeler la méthode EF ToListAsync.Mais rien ne s'est produit - aucune exception, aucun délai d'attente en cours d'exécution.

C'est mon code.

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

Le premier appel de synchronisation de la méthode ToList renvoie immédiatement le résultat.Le deuxième appel asynchrone de ToListAsync toujours en cours d'exécution sans résultat ni exception.

Aucune suggestion?

Était-ce utile?

La solution

Je soupçonne que plus haut dans votre pile d'appels, votre code appelle Task.Wait ou Task<T>.Result.Si vous faites cela sur le thread de l'interface utilisateur ou à partir d'un contexte de requête ASP.NET, votre code sera dans une impasse, comme je l'explique sur mon blog.

Pour le réparer, utilisez await au lieu de Task.Wait ou Task<T>.Result.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top