using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace 亚信电子商务
{ public class Program2
{ public static void Main(string[] args)
{ Console.WriteLine("主线程1"); AsyncTest.ToAsync(()=> { Thread.Sleep(3000); Console.WriteLine("让我用新的线程执行吧,主线程你做你的事吧"); }, () => { Console.WriteLine("回调"); }); AsyncTest.ToAsync<string>(() => { Thread.Sleep(1000);
return "女猪脚和男猪脚结婚了"; }, p => { Console.WriteLine("回调结果:"+ p); }); Console.WriteLine("主线程2"); Console.ReadLine();
} } /// <summary>
/// 将一个普通方法转为异步方法
/// </summary>
public class AsyncTest
{
/// <summary>
/// 把一个普通无参,无返回值的方法转为异步方法
/// </summary>
/// <param name="srcAction">要转的方法</param>
/// <param name="callBack">回调方法</param>
public static async Task ToAsync(Action srcAction,Action callBack)
{
//定义一个异步无返回值的方法,下面写法可能有点绕
Func<Task> task = () =>
{
return Task.Run(() =>
{
srcAction(); });
};
await task();
if (callBack != null)
{
callBack();
}
} /// <summary>
/// 把一个无参有返回值的方法转为异步方法
/// </summary>
/// <typeparam name="T">泛型模板类型</typeparam>
/// <param name="srcFunc">被转的源方法</param>
/// <param name="callBack">回调</param>
public static async Task ToAsync<T>(Func<T> srcFunc, Action<T> callBack)
{ Func<Task<T>> task = () => {
return Task<T>.Run(() => { return srcFunc();
});
}; var result = await task();
if (callBack != null)
{
callBack(result);
} } }
}

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. springsecurity 源码解读之 SecurityContext

    在springsecurity 中,我们一般可以通过代码: SecurityContext securityContext = SecurityContextHolder.getContext(); ...

  2. 1018 Public Bike Management (30) Dijkstra算法 + DFS

    题目及题解 https://blog.csdn.net/CV_Jason/article/details/81385228 迪杰斯特拉重新认识 两个核心的存储结构: int dis[n]: //记录每 ...

  3. UVaLive 5760 Alice and Bob (博弈 + 记忆化搜索)

    题意:有 n 堆石子,有两种操作,一种是从一堆中拿走一个,另一种是把两堆合并起来,Alice 先拿,谁不能拿了谁输,问谁胜. 析:某些堆石子数量为 1 是特殊,石子数量大于 1 个的都合并起来,再拿, ...

  4. Programming | 中/ 英文词频统计(MATLAB实现)

    一.英文词频统计 英文词频统计很简单,只需借助split断句,再统计即可. 完整MATLAB代码: function wordcount %思路:中文词频统计涉及到对"词语"的判断 ...

  5. 异常与Final

    Throwable 类是 Java 语言中所有错误或异常的超类(这就是一切皆可抛的东西).它有两个子类:Error和Exception.Error:用于指示合理的应用程序不应该试图捕获的严重问题.这种 ...

  6. hive 语法 case when 语法

    ' then '精选' else null end as sale_type 注意: end不能少

  7. Django Model Form

    ModelForm ModelForm结合了Form和Model,将models的field类型映射成forms的field类型,复用了Model和Model验证, 写更少的代码,并且还实现了存储数据 ...

  8. 【xsy1596】旅行 期望+状压DP

    题目大意:有$m$个人要从城市$1$开始,依次游览城市$1$到$n$. 每一天,每一个游客有$p_i$的概率去下一个城市,和$1-p_i$的概率结束游览. 当游客到达城市$j$,他会得到$(1+\fr ...

  9. 使用Let's Encrypt加密你的小站

    介绍 Let's Encrypt是一个免费并且开源的CA,且已经获得Mozilla.微软等主要浏览器厂商的根授信.它极大低降低DV证书的入门门槛,进而推进全网的HTTPS化. Certbot is a ...

  10. Android中为什么需要服务?

    在解释这个问题之前, 先来看一个Android系统中进程的优先级(从高到低) 前台进程(foreground process ):  一个应用程序启动, 并且可以直接相应用户的点击,触摸事件.那么这样 ...