.net 异步函数 Async await

.net  异步函数  Async await

  一旦为函数添加async关键字 该函数就是一个异步函数。

  异步方法必须返回 void 或 Task<> 类型。

 

        public static Task<double> GetValueAsync(double num1, double num2)
        {
            return Task.Run(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(500);
                    num1 = num1 + num2;
                    Console.WriteLine("num:{0}", i);
                }
                return num1;
            });
        }
        public static async void DisplayValue()
        {
            double result = await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务,然后方法马上返回  
            //这之后的所有代码都会被封装成委托,在GetValueAsync任务完成时调用  
            System.Diagnostics.Debug.WriteLine("Value is : " + result);
        }

 

 

 

  /// <summary>
        ///  Task<string> 表示一个有返回值异步操作
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static async Task<string> IssuerAsync(string name)
        {
            var str = "";
            var task = Task.Run(() =>
            {
                Thread.Sleep(2000);
                Console.WriteLine("task name:{0}", name);
                str = "my name is " + name;
            });

            //等待任务执行
            await task;
            return str;
        }

 

main() 函数

 

   Task<string> task = AsyncAwaitTempte.IssuerAsync("liuyl");

            Console.WriteLine("count value:");
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("task:{0}", i);
                Thread.Sleep(500);
            } 
             Console.WriteLine("task value:{0}", task.Result);

 

   /// <summary>
        ///  Task<string> 表示一个有返回值异步操作
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public static async Task<string> IssuerAsync(string name)
        {
            string str = "";
            var task = new Task(() =>
            {
                for (int i = 0; i < 4; i++)
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("task name:{0}", name);
                }
                str = "my name is " + name;
            });
            task.Start();
            //task.Wait(); 与   await task ; 不能同时使用
            //等待任务执行
            await task ;
            return str;
        }

 

posted @ 2016-04-16 21:48  dragon.net  阅读(410)  评论(0编辑  收藏  举报