获取数据的 Xamarin 离线同步问题
Xamarin Offline Sync issue with getting data
我在使用 android 模拟器从 Azure 移动后端 api 返回数据时遇到一些问题。移动应用程序是用 Xamarin 编写的,我使用的是 MobileServiceClient 和 IMobileServiceSyncTable。以下是我编码的内容:
var _mobileServiceClient = new MobileServiceClient(url);
var store = new MobileServiceSQLiteStore("notesdb.db");
store.DefineTable<Notes>();
_mobileServiceClient.SyncContext.InitializeAsync(store);
var _notesTable = _mobileServiceClient.GetSyncTable<Notes>();
var temp = await _notesTable.ReadAsync();
后台代码如下:
public IQueryable<Notes> GetAllNotes()
{
return Query();
}
每当我这样做时,应用程序将变得没有响应并且永远不会返回。它就像处于死锁模式。
有人遇到过这个问题吗?
查看 MobileServiceClient
用法后:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-dotnet-how-to-use-client-library
你的通话看起来不错,除了一个:
_mobileServiceClient.SyncContext.InitializeAsync(store);
由于您没有等待此方法,因此不会为您的下一个方法初始化同步上下文。
所以只要等待方法,你应该没问题:
await _mobileServiceClient.SyncContext.InitializeAsync(store);
一条几乎每次都可以应用的通用规则:始终等待返回 Task
个对象的方法。
另外,因为你在 service/repository 层,你应该 ConfigureAwait(false)
你的方法:
var _mobileServiceClient = new MobileServiceClient(url);
var store = new MobileServiceSQLiteStore("notesdb.db");
store.DefineTable<Notes>();
await _mobileServiceClient.SyncContext.InitializeAsync(store).ConfigureAwait(false);
var _notesTable = _mobileServiceClient.GetSyncTable<Notes>();
var temp = await _notesTable.ReadAsync().ConfigureAwait(false);
这样做你的代码不会 运行 在 UI 线程中(虽然不能保证,但我不想让你感到困惑 :)。由于您没有 运行 将代码放在同一个线程上,这也将减少可能的死锁。
我在使用 android 模拟器从 Azure 移动后端 api 返回数据时遇到一些问题。移动应用程序是用 Xamarin 编写的,我使用的是 MobileServiceClient 和 IMobileServiceSyncTable。以下是我编码的内容:
var _mobileServiceClient = new MobileServiceClient(url);
var store = new MobileServiceSQLiteStore("notesdb.db");
store.DefineTable<Notes>();
_mobileServiceClient.SyncContext.InitializeAsync(store);
var _notesTable = _mobileServiceClient.GetSyncTable<Notes>();
var temp = await _notesTable.ReadAsync();
后台代码如下:
public IQueryable<Notes> GetAllNotes()
{
return Query();
}
每当我这样做时,应用程序将变得没有响应并且永远不会返回。它就像处于死锁模式。
有人遇到过这个问题吗?
查看 MobileServiceClient
用法后:https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-dotnet-how-to-use-client-library
你的通话看起来不错,除了一个:
_mobileServiceClient.SyncContext.InitializeAsync(store);
由于您没有等待此方法,因此不会为您的下一个方法初始化同步上下文。
所以只要等待方法,你应该没问题:
await _mobileServiceClient.SyncContext.InitializeAsync(store);
一条几乎每次都可以应用的通用规则:始终等待返回 Task
个对象的方法。
另外,因为你在 service/repository 层,你应该 ConfigureAwait(false)
你的方法:
var _mobileServiceClient = new MobileServiceClient(url);
var store = new MobileServiceSQLiteStore("notesdb.db");
store.DefineTable<Notes>();
await _mobileServiceClient.SyncContext.InitializeAsync(store).ConfigureAwait(false);
var _notesTable = _mobileServiceClient.GetSyncTable<Notes>();
var temp = await _notesTable.ReadAsync().ConfigureAwait(false);
这样做你的代码不会 运行 在 UI 线程中(虽然不能保证,但我不想让你感到困惑 :)。由于您没有 运行 将代码放在同一个线程上,这也将减少可能的死锁。