2011-05-15 2 views
0

J'essaie de créer un exemple d'application en utilisant OData et Silverlight, en utilisant (quoi d'autre?) Le service Netflix. J'ai déjà réussi à créer l'application en utilisant WPF, mais j'ai du mal à porter ma classe de service vers un modèle asynchrone.OData de Silverlight sans modèle de référentiel

Ma classe de service existant (simplifié) se présente comme suit:.

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(); 

    } 

Tous les exemples de la consommation OData emploient de manière asynchrone une sorte de modèle Respository et/ou nécessitent une collection instancié à passer dans je le ferais comme pour modéliser la signature de la méthode de l'appel Silverlight/Async pour regarder quelque chose comme ça (avec la classe de service lui-même étant apatride):

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

} 

Je pense que je pourrais si certains chose dans le sens de ce que MS décrit dans Calling Synchronous Methods Asynchronously, mais j'espérais qu'il y avait une solution plus élégante qui me manquait.

Répondre

0

Comme vous le savez déjà, vous pouvez toujours exécuter l'appel sur un thread différent de celui de l'interface utilisateur, il n'y aura donc pas de blocage en soi. Cela semble être une solution assez décente. Ensuite, vous pouvez (en fait, devez) utiliser les répartiteurs pour gérer les résultats provenant des rappels si vous avez l'intention de les utiliser avec l'interface utilisateur.

Questions connexes