c# - 如果超过 50 行,Xamarin Forms 在节点后端上拉异步失败
问题描述
从 Xamarin Forms 跨平台应用程序在 Node.JS 后端上运行 PullAsync 时,如果表最多有 50 行,则调用成功。
public async Task Sync<T>()
{
if (!CrossConnectivity.Current.IsConnected) { return; }
var table = Client.GetSyncTable<T>();
if (Client.SyncContext.IsInitialized)
{
await table.PullAsync(null, table.CreateQuery());
}
}
PullAsync 似乎添加了 Skip(0) 和 Take(50)。如果我调用一个超过 50 个的表,即使我table.maxTop = 100;
在节点表定义中指定了,应用程序也会出错
Error:An error occurred while sending the request
而 innerException 是
{System.Net.WebException: Error: ConnectFailure (Connection timed out) ---> System.Net.Sockets.SocketException: Connection timed out.....
但我认为这是由于我添加 maxTop = 100 的节点端出现错误。我是否缺少任何明显的信息,我需要一次检索超过 50 行?
我读了这篇文章,其中详细介绍了类似的东西,查询一个天蓝色的表,但我想在使用 PullAsync 时这样做。
更新:
好的,我认为正在发生的事情是这样的,
如果我有多达 50 行,一切都很好。
超过 50 个,我认为第一个查询将使用 skip(0)、take(50) 运行。
它将使用 skip(50) take (50) 再次运行,并且每次都会增加跳过总数,直到没有更多行要处理。
似乎,虽然这是它应该表现的方式,但在第 50 次之后它实际上并没有成功
解决方案
找到了答案。
更换线路
await table.PullAsync(null, table.CreateQuery());
和
var query = table.CreateQuery().Skip(0).Take(1000);
var pullOptions = new PullOptions() { MaxPageSize = 5000 };
await table.PullAsync(null, query, pullOptions);
成功了
推荐阅读
- java - 如何在 Spring-Boot 中使用 SSL 证书并为 Android 客户端生成公钥
- cassandra - cassandra的多节点集群-无法互相闲聊
- c# - AspNetCore 中缺少 Range 标头
- swiftui - DragGesture 没有更新
- php - 错误:在此服务器上找不到请求的 URL /login。(拉拉维尔)
- django - Django 如何在会话中将 JSON 数据保存在视图之外并在视图内检索保存的数据?
- kubernetes - 获取特定的 Kubernetes pod
- monaco-editor - 我应该如何在摩纳哥编辑器中为令牌添加悬停
- python - 如何进行条件 JSON 模式验证
- vue.js - 在动态加载的组件中获取自我