質問

私は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の2番目の非同期呼び出し。

任意の提案?

役に立ちましたか?

解決

私はあなたのコールスタックをさらにアップすると、コードはTask.WaitまたはTask<T>.Resultを呼び出しています。UIスレッドまたはASP.NETリクエストコンテキストでこれを行う場合は、私のブログについて説明するように、コードはデッドロックになります。

それを修正するには、awaitまたはTask.Waitの代わりにTask<T>.Resultを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top