none
异步调用的同步实现 RRS feed

  • 问题

  • 我的系统依赖读取本地数据进行配置,否则几乎所有功能无法正常使用,因此在读取过程中希望程序不要继续执行,有什么简单的办法没有?
    2013年1月5日 8:49

答案

  • Hi,

    这样的话我感觉你可能需要阻塞UI线程,等到调用数据之后再开始执行。

    这样的话可以不使用await,把IAsyncOperation转换成Task之后调用Wait()方法,我写了个例子:

    public void getcontent()
            {
                Launcher.LaunchUriAsync(new Uri("http://www.bing.com")).AsTask().Wait();
            }

    调用的时候也不要写await

    Aaron
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 开拓君 2013年1月8日 11:34
    2013年1月8日 9:15
    版主

全部回复

  • await  不就是这个了。。。
    2013年1月5日 9:20
  • 没错,await 只是程序不会在该方法内往下执行,但会立刻跳出该方法并执行上层调用位置以下的代码,所以只能把所有调用点全部加上 await ,而调用层次中的所有方法必须加异步(async)关键字,最后导致我的一个类库几乎所有方法都成了async。

    能否避免这种情况?比如 使用 await 调用但主调方法不必加 async


    2013年1月5日 10:13
  • 考虑下线程看可不可以
    2013年1月6日 1:06
  • Hi,

    这样的话我感觉你可能需要阻塞UI线程,等到调用数据之后再开始执行。

    这样的话可以不使用await,把IAsyncOperation转换成Task之后调用Wait()方法,我写了个例子:

    public void getcontent()
            {
                Launcher.LaunchUriAsync(new Uri("http://www.bing.com")).AsTask().Wait();
            }

    调用的时候也不要写await

    Aaron
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 开拓君 2013年1月8日 11:34
    2013年1月8日 9:15
    版主
  • 3q,有这个思路基本就解决了。

    2013年1月8日 11:34