2011-05-15 16 views
0

ODataとSilverlightを使用して、Netflixサービスを使用しているサンプルアプリケーションを作成しようとしています。私はすでにWPFを使ってアプリケーションを作成することに成功しましたが、私のサービスクラスを非同期モデルに移植するのに苦労しています。OData with Repository Pattern

私の既存のサービスクラス(簡体字)、次のようになります。

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を消費するすべての例は非同期レポジトリパターンのいくつかの種類を使用し、および/またはに渡されるインスタンス化コレクションを必要と私は考え私は私ので、いくつかのことができると思い

public void AsyncSearch(TitleSearchParam param, Action<IEnumerable<Title>> completedCallback, Action<MyErrorClass> errorCallback, object callBackOwner) 
{ 

} 

:(サービスクラス自体はステートレスである)このような何かを見るためのSilverlight /非同期呼び出しのためのメソッドシグネチャをモデル化したいですMSの輪郭線に沿ったものはCalling Synchronous Methods Asynchronouslyですが、私が欠けていたよりエレガントな解決策があることを期待していました。

答えて

0

あなたが知っているように、あなたはいつもUIスレッドとは別のスレッドでコールを実行することができるので、ブロッキングそのものはありません。それはまともな解決策のようだ。次に、コールバックからの結果をUIで使用する場合は、ディスパッチャを使用してその結果を処理できます(実際には、必ず)。