C# 同步调用Akavache会导致死锁

C# 同步调用Akavache会导致死锁,c#,asynchronous,async-await,akavache,C#,Asynchronous,Async Await,Akavache,我试图使用Akavache的BlobCache.InMemory.GetOrCreateObject将缓存添加到我的一个数据库表中,当我异步调用它时,一切正常。但由于async也需要调用者更改为async,而且有很多地方需要更改,所以我选择同步调用BlobCache.InMemory.GetOrCreateObject,方法如下 public async Task<List<T>> GetAllDataAsync() => await BlobCache.InMem

我试图使用Akavache的
BlobCache.InMemory.GetOrCreateObject
将缓存添加到我的一个数据库表中,当我异步调用它时,一切正常。但由于async也需要调用者更改为async,而且有很多地方需要更改,所以我选择同步调用
BlobCache.InMemory.GetOrCreateObject
,方法如下

public async Task<List<T>> GetAllDataAsync() => await BlobCache.InMemory.GetOrCreateObject(...);
public List<T> GetAllData() => GetAllDataAsync().Result;
公共异步任务GetAllDataAsync()=>等待BlobCache.InMemory.GetOrCreateObject(…);
公共列表GetAllData()=>GetAllDataAsync().Result;
这将导致死锁。我做错了什么


Edit1:此代码在ASP.NET Web API中运行

Akavache是为移动和桌面应用程序设计的,在服务器环境中性能非常差。使用Redis或memcached

关于使用
导致的死锁,有数百个问题。结果
,您搜索过吗?一个常见的解决方案是使用
GetAllDataAsync().getWaiter().GetResult()
,但这也取决于
SynchronizationContext
,但您没有添加有关运行位置的信息。采用异步方式或使用可观察对象进行操作,您会过得更愉快:-)