C# 5.0中引入了async 和 await。这两个关键字可以让你更方便的写出异步代码。 看个例子: public class MyClass { public MyClass() { DisplayValue(); //这里不会阻塞 System.Diagnostics.Debug.WriteLine("MyClass() End."); } public Task<double> GetValueAsync(double num1, double num2) { return Task.Run(() => { for (int i = 0; i < 1000000; i++) { num1 = num1 / num2; } return num1; }); } public async void DisplayValue() { double result = await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务,然后方法马上返回 //这之后的所有代码都会被封装成委托,在GetValueAsync任务完成时调用 System.Diagnostics.Debug.WriteLine("Value is : " + result); } } 上面在MyClass的构造函数里调用了async关键字标记的异步方法DisplayValue(),DisplayValue()方法里执行了一个await关键字标记的异步任务GetValueAsync(),这个异步任务必须是以Task或者Task<TResult>作为返回值的,而我们也看到,异步任务执行完成时实际返回的类型是void或者TResult,DisplayValue()方法里await GetValueAsync()之后的所有代码都会在异步任务完成时才会执行。 DisplayValue()方法实际执行的代码如下: public void DisplayValue() { System.Runtime.CompilerServices.TaskAwaiter<double> awaiter = GetValueAsync(1234.5, 1.01).GetAwaiter(); awaiter.OnCompleted(() => { double result = awaiter.GetResult(); System.Diagnostics.Debug.WriteLine("Value is : " + result); }); } 可以看到,async和await关键字只是把上面的代码变得更简单易懂而已。 程序的输出如下: MyClass() End. Value is : 2.47032822920623E-322 以下是我写的一个静态类,可以方便将一个普通Function执行异步调用: public static class TaskAsyncHelper { /// <summary> /// 将一个方法function异步运行,在执行完毕时执行回调callback /// </summary> /// <param name="function">异步方法,该方法没有参数,返回类型必须是void</param> /// <param name="callback">异步方法执行完毕时执行的回调方法,该方法没有参数,返回类型必须是void</param> public static async void RunAsync(Action function, Action callback) { Func<System.Threading.Tasks.Task> taskFunc = () => { return System.Threading.Tasks.Task.Run(() => { function(); }); }; await taskFunc(); if (callback != null) callback(); } /// <summary> /// 将一个方法function异步运行,在执行完毕时执行回调callback /// </summary> /// <typeparam name="TResult">异步方法的返回类型</typeparam> /// <param name="function">异步方法,该方法没有参数,返回类型必须是TResult</param> /// <param name="callback">异步方法执行完毕时执行的回调方法,该方法参数为TResult,返回类型必须是void</param> public static async void RunAsync<TResult>(Func<TResult> function, Action<TResult> callback) { Func<System.Threading.Tasks.Task<TResult>> taskFunc = ()=> { return System.Threading.Tasks.Task.Run(()=> { return function(); }); }; TResult rlt = await taskFunc(); if(callback != null) callback(rlt); […]
View DetailsFacebook周三发布OpenCellular开源新平台,旨在通过向偏远地区提供连接移动蜂窝网所必须的设备和开源软件,以帮助居住于这些社区的人们实现连接互联网。此举是Facebook在推进全球互联网连接战略的又一新尝试。Facebook和扎克伯格当前的优先战略是帮助全球没有互联网覆盖的40亿人及没有手机服务覆盖的10%人口实现联网。 为此,公司推出了各种计划,包括热气球和无人机等,以辅助实现对这些偏远地区的互联网接入。然而不同于此前其它计划,OpenCellular的推广会依赖合作伙伴的加入,Facebook于周三公布了该计划的正式蓝图。 OpenCellular 在设计上主要针对环境条件极恶劣的偏远地区。Facebook将会为这些地区提供指导及必要的基础材料,以建造一座不受天气影响、能够在强风和高温下持续 使用的基站。OpenCellular只需要一个人就能完成安装,基站可以置于树上或距离地面几尺高的电杆上。 Facebook并不会亲自 部署和管理OpenCellular。该公司的计划是引导电信运营商、软件开发商以及研究人员等来尝试和安装设备。在设备完成安装后,技术人员将可以通过 监控方式远程操作。为减少需实际前往基站地点进行维护的情况,OpenCellular能够在出现严重问题并无法自我修复时,通知远程控制中心并自我重 设。OpenCellular支持使用太阳能供电,或者电池和PoE。 稿源:网易科技 from:http://www.oschina.net/news/74978/facebook-opencellular
View DetailsMIT工程师开发出一种容易定制的疫苗, 能在一周内生产,能对疫情爆发快速做出反应。对小鼠的实验显示,可编程性使RNA疫苗对埃博拉、H1N1和刚地弓形虫具有100%效力。信使RNA能将携 带的遗传信息转译给蛋白质,它能针对病毒、细菌或寄生虫蛋白质进行编码,将信息转译给蛋白质去激发宿主的免疫反应。除了针对传染病外,研究人员正使用这种 方法去创造癌症疫苗,训练免疫系统识别和摧毁癌细胞。研究报告发表在本周出版的PNAS期刊上。 稿源:solidot奇客 from:http://www.oschina.net/news/74971/mit-engineers-developed-rna-vaccine
View Details