【发布时间】:2018-07-24 20:51:44
【问题描述】:
Mono.Android 要求我进行异步查询。我可以这样做:
DataServiceQuery<T> dataServiceQuery = query as DataServiceQuery<T>;
return (new TaskFactory<IEnumerable<T>>()).FromAsync(dataServiceQuery.BeginExecute(null, null), asyncResult => dataServiceQuery.EndExecute(asyncResult)).Result;
问题是我不想在每次查询时都调用这个方法,因为这会强制使用我的库的用户调用该方法,否则 Mono 会崩溃,所以我想做 DataServiceQuery默认情况下执行此操作。我可以通过覆盖 DataServiceQuery 中的 GetEnumerator() 函数来做到这一点,但它的构造函数是私有的,所以我不允许这样做。我想我剩下的唯一选择是用我的更改重新编译 System.Data.Services.Client.dll。也许 DataServiceContext 有一个技巧,但老实说我没有选择。
感谢您的帮助, 马克西姆
【问题讨论】:
-
为什么不在你的方法中使用回调?当您库的用户查询您的方法时,他们调用
yourLib.ExecuteQuery(query, (result) => { ... });,您的方法采用ExecuteQuery(string Query, Action<List<T>> Callback)。但不能肯定地说,需要更多信息 -
查询是 DataserviceQuery 上的 LINQ 查询
-
类似于“从 lib.Items 中的项目选择项目”,而不是“lib.GetAsync(从 lib.Items 中的项目选择项目)”
-
是的,没关系。但我的意思是,根据需要创建查询。在你有
TaskFactory的查询中,创建一个新任务,运行你的查询并在你有一个Task.Factory.StartNew(async () => { ... callback?.invoke(asyncResult)...});时返回结果 -
我给出的代码示例应该在用户查询时自动运行
标签: c# android xamarin mono odata