我正在尝试使用OData和Silverlight创建一个示例应用程序,使用(还有什么?)Netflix服务。我已经成功使用WPF创建了应用程序,但我很难将我的服务类移植到异步模型。
我现有的服务类(简化)如下所示:
public IEnumerable<Title> BlockingSearch(TitleSearchParam param)
{
var catalog = new NetflixCatalog(new Uri("http://odata.netflix.com/Catalog/"));
return catalog.Titles.Where(t =>
t.Instant.AvailableFrom > param.InstantStartDate && t.Instant.AvailableFrom < param.InstantEndDate &&
(string.IsNullOrEmpty(param.TitleName) || t.Name.Contains(param.TitleName))).ToList();
}
消耗OData的所有示例异步使用某种Respository Pattern和/或需要传入实例化的集合。我想模拟Silverlight / Async调用的方法签名,看起来像这样(带有服务类本身是无状态的):
public void AsyncSearch(TitleSearchParam param, Action<IEnumerable<Title>> completedCallback, Action<MyErrorClass> errorCallback, object callBackOwner)
{
}
我认为我可以这么类似MS在Calling Synchronous Methods Asynchronously中概述的内容,但我希望有一个更优雅的解决方案,我错过了。
答案 0 :(得分:0)
如您所知,您始终可以在与UI线程不同的线程上运行调用,因此本身不会有阻塞。这似乎是一个不错的解决方案。然后你可以(实际上必须)使用调度程序处理来自回调的结果,如果你打算在UI中使用它们。