gpt4 book ai didi

sqlite - Azure/Xamarin 移动应用程序在 SyncContext.InitializeAsync 处挂起

转载 作者:行者123 更新时间:2023-12-03 15:46:02 25 4
gpt4 key购买 nike

所以,我有一个使用 azure 移动服务的工作 xamarin 表单应用程序。我升级了服务器端以使用移动应用服务,并升级了客户端中的 nugets 以使用最新最好的客户端代码。

我手动更新了我的 test/ios 模拟器 sqlite db 以使用系统属性的正确列名,因为它们删除了双下划线前缀。

当我最终完成所有构建并尝试在 ios 6/8.3 模拟器中运行时,它运行良好,直到它遇到 InitializeAsync 方法。它不会抛出(它在 try catch ),我让它运行了很长时间,它就坐在那里。

然后我尝试更改数据库名称,以便从头开始创建它,它确实做到了,但仍然只是挂起。因此,我尝试将其简化为一个表并取出我的委托(delegate)处理程序,使其尽可能基本,但它仍然挂起。

有没有其他人有这个问题?我完全不知所措,因为我没有收到错误。不知道从哪里开始。

谢谢。

编辑,添加代码:

var store = new MobileServiceSQLiteStore(_localDatabaseName);

store.DefineTable<Profile>();
try
{
await _mobileService.SyncContext.InitializeAsync(store);
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
}

我也按照建议尝试了 ConfigureAwait(false) ,但没有任何区别。
我在 catch 和紧跟该 block 的代码中设置了断点,但它们从未被命中。

最佳答案

好的,所以我又看了看,发现了一些关于死锁线程的信息,由异步/等待的大师 Stephen Cleary 回答。
它让我转向上游。对我的天蓝色初始化代码的调用如下所示:

var azureService = Container.Get<IAzureService>();
azureService.InitializeAzync().Wait();

这是在调用组件的构造函数中。
所以,我把它改成这样:
try
{
Task.Run(() => azureService.InitializeAsync()).Wait();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}

SyncContext.InitializeAsync() 调用工作正常并继续。

所以,我真的不知道这个问题的答案,我猜新的天蓝色客户端的内部做的事情与旧代码不同,因为使用 Wait() 是我以前的做法,从来没有遇到过问题。但是有某种线程死锁。很奇怪,花了好几天才过去,现在我必须解决我遇到的下一个僵局。如果斯蒂芬在那里并且可以提供一些澄清,那就太好了。

关于sqlite - Azure/Xamarin 移动应用程序在 SyncContext.InitializeAsync 处挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36944296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com