码迷,mamicode.com
首页 > 其他好文 > 详细

每天一段代码-异步编程(1)

时间:2015-06-02 13:15:33      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

  如何让你的代码在“同一时间”干着两件件事呢?比如说,在初始化加载配置的同时,UI界面能够响应用户的各种点击事件。而不置于卡死,特别是出现如下面这种情况的时候,对于用户来说是很崩溃的。

技术分享

  那么我们得用什么技术来避免这种问题呢?是的,异步编程。(当然引发程序卡死,不一定是没有用异步,也可能程序本身就有异常)

  相关案例

  假设现在你正在吃着早饭,在吃的同时你又想玩游戏,现在我们用代码来实现这个问题。

技术分享

  首先创建一个吃饭的方法

 1         async static Task<string> EatAsync()
 2         {
 3             Console.WriteLine("把饭放到嘴里");
 4             //这是一个很耗时的操作
 5             var result = await Task.Run<string>(() =>
 6             {
 7                 for (int i = 0; i < 5; i++)
 8                 {
 9                     Thread.Sleep(500);
10                     Console.WriteLine("嚼了{0}下", i);
11                 }
12                 return "把饭咽下去";
13             });
14             return result;
15         }

  在上面的代码中,我们看到:异步方法需要一个async修饰符;异步方法最好统一以“Async”作为后缀结尾。

  对于异步方法的返回值有以下几种类型:

    如果你的方法有操作数为 TResult 类型的返回语句,则为 Task

    如果你的方法没有返回语句或具有没有操作数的返回语句,则为 Task

    如果你编写的是异步事件处理程序,则为 Void。

  下面是玩游戏的方法(当然这只是个简单的方法)

1         //这个方法你也可以用写成异步方法
2         static void PlayGame()
3         {
4             for (int i = 0; i < 10; i++)
5             {
6                 Thread.Sleep(200);
7                 Console.WriteLine("超级玛丽奔跑中...");
8             }
9         }

  一个简单吃早饭的函数

 1         async static void BreakfastTimeAsync()
 2         {
 3             //返回一个string类型的结果
 4             Task<string> temp = EatAsync();
 5 
 6             //在这里做一些与吃饭不相关的事
 7             PlayGame();
 8 
 9             //等待temp任务的完成
10             var result = await temp;
11 
12             //对最终的结果做一些处理
13             Console.WriteLine(result);
14         }

  在异步方法中方法通常包含至少一个 await 表达式,该表达式标记一个点,在该点上,直到等待的异步操作完成方法才能继续。 同时,将方法挂起,并且控件返回到方法的调用方

  最后来看下运行结果

技术分享

  最后流年建议大家在吃饭的时候不要做别的事情,这是很危险的技术分享

 相关阅读

https://msdn.microsoft.com/zh-cn/library/hh191443.aspx

https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task%28v=vs.110%29.aspx

每天一段代码-异步编程(1)

标签:

原文地址:http://www.cnblogs.com/liunlls/p/async.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!