Azure/Xamarin Mobile App Hangs at SyncContext.InitializeAsync

牧云@^-^@ 提交于 2019-12-21 21:38:28

问题


So, I had a working xamarin forms app that used azure mobile services. I upgraded the server side to use mobile app service and upgraded the nugets in my client to use the latest and greatest client codes.

I manually updated my test/ios simulator sqlite db to use the proper column names for the system properties since they dropped the double underscore prefix.

When I finally got it all built and tried to run in the ios 6/8.3 simulator it ran fine until it hit the InitializeAsync method. It doesn't throw (its in a try catch) and I let it run for a long time and it just sits there.

I then tried to change the db name so it would make it from scratch, which it did but still just hung. So I then tried to simplify it to a single table and took out my delegating handler so it was as basic as I could get it and it still just hangs.

Has anyone else had this problem? I am at a complete loss because I don't get an error. Not sure where to start.

Thanks.

Edit, code added:

var store = new MobileServiceSQLiteStore(_localDatabaseName);

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

I also tried with ConfigureAwait(false) as suggested but it made no difference. I set breakpoints in the catch and the code that immediately follows this block but they are never hit.


回答1:


Ok, so I poked around a bit more and found some info on deadlocked threads answered by Stephen Cleary, the guru of async/await. It turned me onto looking upstream. The call into my azure init code looked like this:

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

Which was in the constructor of the calling component. So, I changed it to this:

try
{
    Task.Run(() => azureService.InitializeAsync()).Wait();
}
catch (Exception ex)
{
    Debug.WriteLine(ex.Message);
}

And the SyncContext.InitializeAsync() call worked fine and continued on.

So, I don't really know the answer for this, I guess the internals of the new azure client do something differently than the old code since using Wait() was how I did it before and never had a problem. But there was some sort of threading deadlock. Very odd and took days to get past, now I have to fix the next deadlock I hit. If Stephen is out there and can offer some clarification that would be great.




回答2:


Had this same issue - changing to a Task.Run and ConfigureAwait(false) did fix it.

Very odd thing is the same code worked fine with Mobile Services, but broke when we upgraded to Mobile App Services.



来源:https://stackoverflow.com/questions/36944296/azure-xamarin-mobile-app-hangs-at-synccontext-initializeasync

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!