WP7下的异步

       先来介绍一下异步所需要的组件,Async CTP Refres微软在2011年4月13号发布了一个VS2010 的补丁,这个补丁可以运用在Windows Phone 7的开发中,也可以运用在所有的.NET 平台环境中。

       CTP有几个新的关键字:

  • async: 标记一个函数为异步函数,而这个函数必须返回的是viod ,Task, Task<T> 这三种类型。在一个异步函数的里面,你可以使用await 表达式来等待一个任务。换句话说,把当前的功能的执行过程停止,直到你要求等待的那个任务执行完成。(编程语言负责设置和处理流程的继续)。
  • await:让执行流程停止在当前的函数直到返回类型是Task或者Task<T>的函数调用结束,然后执行过程继续到调用await的函数。
  • Task:用来展现异步操作和表现出检查当前执行状态所需要的信息或者await函数直到执行到最后。
  • TaskEx:允许一些Helper和Utililty方法,让异步代码可以在不同的线程或者await多个任务结束。

           下面介绍一个简单异步调用

            调用viod类型的异步函数

     
    public static void WriteTxt()
            {
                Console.WriteLine("Start Thread---");
                WriteLine();
                Console.WriteLine("End Thread---");
                Console.ReadLine();
            }

          上面方法中WriteLine()async 关键字的异步函数

    public static async void WriteLine()
            {
                string a = await NewLine();
                Console.WriteLine(a);
            }

          在这个方法中 NewLine() 是Task<T>类型的方法,在调用Task<T>类型方法前使用关键字await,可以使这个方法等待NewLine()执行结束了,才执行Console.WriteLine(a).而不影响WriteLine()函数中的Console.WriteLine("End Thread---")执行。

    public static Task<string> NewLine()
            {
                var task = new Task<string>(() => {
                    Thread.Sleep(5000);
                    return "AAA";
                });
                task.Start();
                return task;
            }

         这段代码是异步的关键,构建一个Task对象,Task<T> 的T就是函数返回的最终类型。就是Task<string> NewLine() 是写具体异步所需要执行的逻辑代码。

         这个代码的执行结果应该是

           image

posted @ 2011-08-05 15:16  编豆芽的  阅读(556)  评论(0编辑  收藏  举报