一切福田,不離方寸,從心而覓,感無不通。

说说C#的async和await

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); […]

龙生   07 Jul 2016
View Details

Facebook 发布基站开源平台 OpenCellular

Facebook周三发布OpenCellular开源新平台,旨在通过向偏远地区提供连接移动蜂窝网所必须的设备和开源软件,以帮助居住于这些社区的人们实现连接互联网。此举是Facebook在推进全球互联网连接战略的又一新尝试。Facebook和扎克伯格当前的优先战略是帮助全球没有互联网覆盖的40亿人及没有手机服务覆盖的10%人口实现联网。 为此,公司推出了各种计划,包括热气球和无人机等,以辅助实现对这些偏远地区的互联网接入。然而不同于此前其它计划,OpenCellular的推广会依赖合作伙伴的加入,Facebook于周三公布了该计划的正式蓝图。 OpenCellular 在设计上主要针对环境条件极恶劣的偏远地区。Facebook将会为这些地区提供指导及必要的基础材料,以建造一座不受天气影响、能够在强风和高温下持续 使用的基站。OpenCellular只需要一个人就能完成安装,基站可以置于树上或距离地面几尺高的电杆上。 Facebook并不会亲自 部署和管理OpenCellular。该公司的计划是引导电信运营商、软件开发商以及研究人员等来尝试和安装设备。在设备完成安装后,技术人员将可以通过 监控方式远程操作。为减少需实际前往基站地点进行维护的情况,OpenCellular能够在出现严重问题并无法自我修复时,通知远程控制中心并自我重 设。OpenCellular支持使用太阳能供电,或者电池和PoE。 稿源:网易科技 from:http://www.oschina.net/news/74978/facebook-opencellular

龙生   07 Jul 2016
View Details

MIT 工程师开发出可编程 RNA 疫苗

MIT工程师开发出一种容易定制的疫苗, 能在一周内生产,能对疫情爆发快速做出反应。对小鼠的实验显示,可编程性使RNA疫苗对埃博拉、H1N1和刚地弓形虫具有100%效力。信使RNA能将携 带的遗传信息转译给蛋白质,它能针对病毒、细菌或寄生虫蛋白质进行编码,将信息转译给蛋白质去激发宿主的免疫反应。除了针对传染病外,研究人员正使用这种 方法去创造癌症疫苗,训练免疫系统识别和摧毁癌细胞。研究报告发表在本周出版的PNAS期刊上。 稿源:solidot奇客 from:http://www.oschina.net/news/74971/mit-engineers-developed-rna-vaccine

龙生   07 Jul 2016
View Details