-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に
'.Result'を使ってデッドロックについて何百もの質問がありますが、検索しましたか?よくある解決策は、 'GetAllDataAsync()。GetAwaiter()。GetResult()'を使用することですが、これは 'SynchronizationContext'にも依存しますが、実行されている場所に関する情報は追加しませんでした。 –
それをすべて非同期にするか、Observablesですべて実行すると、もっと幸せな時間になるでしょう:-) –