我有一个 Xamarin.Forms 应用程序,在我的 App 类中有这段代码(是的,这只是演示问题的示例):
public App()
{
BlobCache.ApplicationName = "MyApp";
BlobCache.EnsureInitialized();
// The root page of your application
MainPage = GetMainPage();
}
public object BlockingGetExternalUser()
{
return GetExternalUser().Result;
}
private async Task<object> GetExternalUser()
{
try
{
return await BlobCache.LocalMachine.GetObject<object>("user");
}
catch (KeyNotFoundException)
{
return null;
}
}
密钥“用户”不存在,所以我希望得到一个 KeyNotFoundException。但是我从来没有看到这个异常被抛出。相反,它只是“挂起”并且永远不会从 await GetObject 调用返回。
我正在使用 Android 5.0 的手机上运行它。
任何想法如何解决这一问题?我在做一些根本错误的事情吗?
更新:附带说明:可以尝试检查密钥是否确实存在于缓存中,然后才从缓存中检索它,而不是立即尝试 GetObject。但是,如果我没记错的话,除了调用 GetObject 并捕获上面示例中的异常之外,没有其他方法可以进行检查。对于只想知道某个项目是否存在的情况,这似乎并不理想。也许在 Akavache 中使用“Exists()”方法会很不错?或者,也许我错过了什么?
Update2:将示例更改为不在构造函数中使用异步方法。只是为了证明这不是问题所在。
Update3:从构造函数中删除调用。当我从代码中的任何位置调用 BlockingGetExternalUser 时,等待仍会挂起。