2017-11-23 24 views
-2

Akavache의 BlobCache.InMemory.GetOrCreateObject을 사용하여 데이터베이스 테이블 중 하나에 캐싱을 추가하려고합니다. 비동기식으로 호출하면 모든 것이 정상입니다. 그러나 비동기 이후뿐만 아니라 비동기 및 변경할 수있는 많은 장소가 변경하려면 호출자가 필요합니다, 그래서 이것은 교착 상태의 원인이됩니다 Akavache를 동 기적으로 호출하면 교착 상태가 발생합니다.

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

아래에 뭔가를 수행하여 동 기적으로 대신 BlobCache.InMemory.GetOrCreateObject 전화를 선택. 나는 무엇을 잘못 했는가?

EDIT1

:이 코드는

+2

'.Result'를 사용하여 교착 상태와 관련하여 수백 가지 질문이 있습니다. 검색을 해봤습니까? 일반적인 해결책은'GetAllDataAsync(). GetAwaiter(). GetResult()'를 사용하는 것입니다. 그러나 이것은'SynchronizationContext'에도 달려 있지만,이 곳의 정보를 추가하지 않았습니다. –

+0

Observables로 모든 것을 비동기로 수행하거나 모든 작업을 수행하면 훨씬 행복한 시간을 가질 수 있습니다. –

답변

1

Akavache는 모바일 및 데스크톱 애플리케이션을 위해 설계 및 서버 환경에서 매우 저조한 수행하는 ASP.NET 웹 API에서 실행됩니다. Redis 또는 memcached를 사용하십시오.