2014-03-13 40 views
0

我想异步获取实体。我知道如何异步获取集合,但不是一个对象。这里是我得到一个集合的代码:在.net应用程序中SingleOrDefault异步

MoviesService.Container _proxy; 

_proxy在构造函数中初始化。下面是其他代码:

private async void Button_Click(object sender, RoutedEventArgs e) 
     { 
      IQueryable<MoviesService.Title> query = _proxy.Titles; 
      var titles = await GetTitlesAsych(query); 
      DataServiceCollection<MoviesService.Title> collection = new DataServiceCollection<MoviesService.Title>(); 
      collection.Load(titles); 
      this.DataContext = collection; 
     } 
private Task<IEnumerable<MoviesService.Title>> GetTitlesAsych(IQueryable<MoviesService.Title> query) 
     { 
      DataServiceQuery<MoviesService.Title> dsQuery = (DataServiceQuery<MoviesService.Title>)(query); 
      return Task.Factory.FromAsync<IEnumerable<MoviesService.Title>>(dsQuery.BeginExecute, dsQuery.EndExecute, null); 
     } 

我很困惑如何改变这个,所以它可以用来获得一个单一的实体。

我正在使用web api 2.

回答

0

异步加载结果集作为集合。该列表将包含0或1个项目。然后,同步使用Enumerable.SingleOrDefault

我只是说,你不应该在服务器上默认使用异步。在需要时使用它。

+0

这是在客户端...但在我的网络api中,我的控制器都是asych方法...我在创建控制器时检查了使用asych方法。 – Kourosh

+0

当然,您希望在服务器上使用异步方法,并使用单线程同步上下文。如果您的服务器只是访问数据库,则可以在不牺牲性能的情况下杀死所有与并发有关的问题。 – zmbq

+0

@zmbq根本没有内部请求的并发性。异步实际上有可能引入它。此外,您的异步代码只能针对单个请求运行。如果只有一个内核被设计使用,任何应用程序都会表现得非常糟糕。这不是那样的。 – usr

相关问题