2017-11-23 9 views
-2

AkavacheのBlobCache.InMemory.GetOrCreateObjectを使用して、データベーステーブルの1つにキャッシュを追加しようとしましたが、非同期に呼び出すとすべて正常です。しかし、非同期以降だけでなく非同期に変更するために、発信者を必要とし、そこに変更するための多くの場所があるので、私はこれは、デッドロックが発生します Akavacheを同期的に呼び出すとデッドロックが発生する

public async Task<List<T>> GetAllDataAsync() => await BlobCache.InMemory.GetOrCreateObject(...); 
public List<T> GetAllData() => GetAllDataAsync().Result; 

下のような何かを行うことによって、同期の代わり BlobCache.InMemory.GetOrCreateObjectを呼び出すことを選びます。私は何を間違えたのですか?

EDIT1:このコードは、ASP.NETのWeb APIに

+2

'.Result'を使ってデッドロックについて何百もの質問がありますが、検索しましたか?よくある解決策は、 'GetAllDataAsync()。GetAwaiter()。GetResult()'を使用することですが、これは 'SynchronizationContext'にも依存しますが、実行されている場所に関する情報は追加しませんでした。 –

+0

それをすべて非同期にするか、Observablesですべて実行すると、もっと幸せな時間になるでしょう:-) –

答えて

1

を実行しているAkavacheはモバイルおよびデスクトップアプリケーション用に設計されており、サーバー環境で非常にうまく機能します。 Redisまたはmemcachedを使用します。

関連する問題