1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7.  
  8. namespace 亚信电子商务
  9. {
  10.  
  11. public class Program2
  12. {
  13.  
  14. public static void Main(string[] args)
  15. {
  16.  
  17. Console.WriteLine("主线程1");
  18.  
  19. AsyncTest.ToAsync(()=> {
  20.  
  21. Thread.Sleep(3000);
  22.  
  23. Console.WriteLine("让我用新的线程执行吧,主线程你做你的事吧");
  24.  
  25. }, () => { Console.WriteLine("回调"); });
  26.  
  27. AsyncTest.ToAsync<string>(() => {
  28.  
  29. Thread.Sleep(1000);
  30. return "女猪脚和男猪脚结婚了";
  31.  
  32. }, p => { Console.WriteLine("回调结果:"+ p); });
  33.  
  34. Console.WriteLine("主线程2");
  35.  
  36. Console.ReadLine();
  37. }
  38.  
  39. }
  40.  
  41. /// <summary>
  42. /// 将一个普通方法转为异步方法
  43. /// </summary>
  44. public class AsyncTest
  45. {
  46. /// <summary>
  47. /// 把一个普通无参,无返回值的方法转为异步方法
  48. /// </summary>
  49. /// <param name="srcAction">要转的方法</param>
  50. /// <param name="callBack">回调方法</param>
  51. public static async Task ToAsync(Action srcAction,Action callBack)
  52. {
  53. //定义一个异步无返回值的方法,下面写法可能有点绕
  54. Func<Task> task = () =>
  55. {
  56. return Task.Run(() =>
  57. {
  58. srcAction();
  59.  
  60. });
  61. };
  62. await task();
  63. if (callBack != null)
  64. {
  65. callBack();
  66. }
  67. }
  68.  
  69. /// <summary>
  70. /// 把一个无参有返回值的方法转为异步方法
  71. /// </summary>
  72. /// <typeparam name="T">泛型模板类型</typeparam>
  73. /// <param name="srcFunc">被转的源方法</param>
  74. /// <param name="callBack">回调</param>
  75. public static async Task ToAsync<T>(Func<T> srcFunc, Action<T> callBack)
  76. {
  77.  
  78. Func<Task<T>> task = () => {
  79. return Task<T>.Run(() => {
  80.  
  81. return srcFunc();
  82. });
  83. };
  84.  
  85. var result = await task();
  86. if (callBack != null)
  87. {
  88. callBack(result);
  89. }
  90.  
  91. }
  92.  
  93. }
  94. }

c#方法转异步例子的更多相关文章

  1. MVC4方法行为过滤器例子(用户登录)

    在Model文件夹下添加一个类MyActionFilterAttribute继承于ActionFilterAttribute: using System; using System.Collectio ...

  2. Spring中@Async注解实现“方法”的异步调用

    原文:http://www.cnblogs.com/zhengbin/p/6104502.html 简单介绍: Spring为任务调度与异步方法执行提供了注解支持.通过在方法上设置@Async注解,可 ...

  3. MVC验证09-使用MVC的Ajax.BeginForm方法实现异步验证

    原文:MVC验证09-使用MVC的Ajax.BeginForm方法实现异步验证 MVC中,关于往后台提交的方法有: 1.Html.BeginForm():同步 2.Ajax.BeginForm():异 ...

  4. C# 将某个方法去异步执行

    C# 将某个方法去异步执行 Task.Run(() => { string msgerror = SendPhoneCode.NewSendByTemplate(apply.PhoneNum, ...

  5. then()方法是异步执行

    then()方法是异步执行 就是当.then()前的方法执行完后再执行then()内部的程序 这样就避免了,数据没获取到等的问题

  6. php 不等待返回的实现方法(异步调用)

    PHP异步执行的常用方式常见的有以下几种,可以根据各自优缺点进行选择: 1.客户端页面采用AJAX技术请求服务器优点:最简单,也最快,就是在返回给客户端的HTML代码中,嵌入AJAX调用,或者,嵌入一 ...

  7. 异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)

    在一个项目中,为了系统执行效率更快,把一个经常用到的数据库表通过dataset放到Application中,发现在异步实现中每一次都会出现HttpContext.Current为null的异常,后来在 ...

  8. AsyncContext的startAsync()方法开启异步

    Servlet 3.0的异步处理支持特性,使Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线程可以将耗时的 ...

  9. 【转】爬虫的一般方法、异步、并发与框架scrapy的效率比较

    该文非原创文字,文字转载至  jclian91  链接:https://www.cnblogs.com/jclian91/p/9799697.html Python爬虫的N种姿势   问题的由来    ...

随机推荐

  1. bgfx入门练习2——找出DX,OpenGL驱动切换实现原理

    找到驱动切换的代码,自然而然就要找实现的位置了,简单搜了下,原来是GLSL Shader字节码转换到HLSL字节码,正好和Klayge做了相反的工作. 时间上似乎也差不多,Klyage是2014年搞的 ...

  2. python模块:random

    """Random variable generators. integers -------- uniform within range sequences ----- ...

  3. 字符串相似度算法——Levenshtein Distance算法

    Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一 ...

  4. PLL与PHY的连接:通道绑定或者不绑定

    用到的术语: clock skew的产生 延时与时钟线的长度及被时钟线驱动的时序单元的负载电容.个数有关 由于时钟线长度及负载不同,导致时钟信号到达相邻两个时序单元的时间不同 于是产生所谓的clock ...

  5. win7 装docker

    Win7安装Docker 主要是装这个 ,官网没有win7版本 Docker Toolbox on Windows

  6. Python自动化开发 - MySQL(一)

    本节内容 一.概述 二.下载安装 三.数据库操作 四.数据表操作 五.表内容操作 一.概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么 ...

  7. 调用opencv相关函数,从视频流中提取出图片序列&&&&jpg图片序列,转化成avi格式视频

    /************************ @HJ 2017/3/30 参考http://blog.sina.com.cn/s/blog_4b0020f301010qcz.html修改的代码 ...

  8. string Type

    Notes from C++ Primer Operations Operations of string support lots of operations of sequential conta ...

  9. 75道经典AI面试题,我就想把你们安排的明明白白的!(含答案)

    基础知识(开胃菜) Python 1.类继承 有如下的一段代码: class A(object): def show(self): print 'base show' class B(A): def ...

  10. Mac 安装微软雅黑字体

    https://www.jianshu.com/p/d8c34fff3483 1.找一台Windows电脑,打开字体文件夹C:\Windows\Fonts. 2.搜索"Calibri.微软雅 ...