gpt4 book ai didi

silverlight - 顺序 WebClient 请求的良好异步模式

转载 作者:行者123 更新时间:2023-12-04 17:05:28 28 4
gpt4 key购买 nike

我在 .NET 中编写的用于进行 REST 调用的大部分代码都是同步的。由于 Windows Phone 上的 Silverlight 仅支持 Async WebClient 和 HttpWebRequest 调用,我想知道对于公开进行 REST 调用的方法的类来说,什么是好的异步模式。

例如,我有一个应用程序需要执行以下操作。

  • 登录并获取 token
  • 使用 #1 中的 token ,获取专辑列表
  • 使用 #1 中的 token 获取类别列表

  • 我的类(class)公开了一些方法:
  • 登录()
  • GetAlbums()
  • GetCategories()

  • 因为每个方法都需要使用异步调用来调用 WebClient,所以我需要做的实际上是阻止调用 Login 直到它返回,以便我可以调用 GetAlbums()。

    在我的类中公开这些方法的好方法是什么?

    最佳答案

    您可以查看 Reactive (Rx) 框架扩展:

    http://www.leading-edge-dev.de/?p=501

    http://themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html

    [编辑:哦 - 找到一个很好的链接:]
    http://rxwiki.wikidot.com/101samples

    它们提供了一种“排序”事件的方法,仅在满足某些条件时起作用 - 例如,假设您有一个方法“AuthenticationResult Authenticate(string user, string pass)”

    你可以这样做:

    var foo = Observable.FromAsyncPattern<string, string, AuthenticationResult>
    (client.BeginAuthenticate, client.EndAuthenticate);
    var bar = foo("username","password");
    var result = bar.First();

    有效地将异步方法转换为同步方法。您可以将其扩展为包括“链接”:
    var bar = foo("username", "password")
    .Then(authresult => DoSomethingWithResult(authresult));

    整洁的东西。 :)

    关于silverlight - 顺序 WebClient 请求的良好异步模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478918/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com