using System;

namespace ActionDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("同步调用开始=>");
int a = SyncAdd(, );
Console.WriteLine("同步调用结束:" + a); Console.WriteLine("--------------------------"); Console.WriteLine("异步调用开始=>");
AyscAdd(, , (result) =>
{
Console.WriteLine("异步调用结果:" + result);
});
Console.WriteLine("异步调用结束"); Console.ReadLine();
} /// <summary>
/// 异步调用
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <param name="callBackAction"></param>
/// <returns></returns>
static void AyscAdd(int a, int b, Action<int> callBackAction)
{
Func<int> func = () =>
{
return new MyMath().Add(a, b);
};
func.BeginInvoke((ar) =>
{
var result = func.EndInvoke(ar);
callBackAction.Invoke(result);
},
null); } /// <summary>
/// 同步调用
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
static int SyncAdd(int a, int b)
{
return new MyMath().Add(a, b);
}
} public class MyMath
{ public int Add(int a, int b)
{
System.Threading.Thread.Sleep();
return a + b;
} }
}

输出结果如下:

同步调用开始=>
同步调用结束:3
--------------------------
异步调用开始=>
异步调用结束
异步调用结果:7

//参数类型
public class CatalogInfo {} //耗时的方法
public IList<CatalogInfo> GetEntityByKey(string strId)
{
  return new IList<CatalogInfo>();
} //通过异步操作防止主线程卡顿
private void IniAllCatalog()
{
  //初始化Func 此类可以传多个参数,最后一个是返回参数,其余为传入参数
  Func<string, IList<CatalogInfo>> Fun = GetEntityByKey;
  // "1" 为传入参数 list 为返回参数
  Fun.BeginInvoke("", list =>
  {
    //异步操作结束
    var result = Fun.EndInvoke(list);
    this.BeginInvoke(new Action<IList<CatalogInfo>>(BuildRootTree), result);
  }, null);
} //完成异步后对不在同一个线程中的界面进行操作
private void BuildRootTree(IList<CatalogInfo> TreeRoot)
{
  //ToDo:操作界面
}

C# Func的同步、异步调用的更多相关文章

  1. dubbo同步/异步调用的方式

    我们知道,Dubbo 缺省协议采用单一长连接,底层实现是 Netty 的 NIO 异步通讯机制:基于这种机制,Dubbo 实现了以下几种调用方式: 同步调用(默认) 异步调用 参数回调 事件通知 同步 ...

  2. .Net下的MSMQ(微软消息队列)的同步异步调用

    一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具.消息队列 和电子邮件有着很多相似处,他们都包含多个属性, ...

  3. jQuery同步/异步调用后台方法

    $.ajax({ type: "Post", url: "UserManage.aspx/SubmitPage",//页面/方法名 data: "{' ...

  4. ajax 同步异步调用

  5. C#:Func的同步、异步调用

    using System; namespace ActionDemo { class Program { static void Main(string[] args) { Console.Write ...

  6. C#:Func的同步、异步调用(转)

    实际开发中,对于一些耗时较长的操作,我们往往会将其封装成异步方式调用,以加速系统响应或改善用户体验,下面是一个示例: 有一个现成的类MyMath,里面有一个Add方法: 1 public class ...

  7. C#的同步和异步调用方法

    同步和异步大家都明白什么意思,在这里不多介绍了. namespace ConsoleTest { class Program { static void Main(string[] args) { C ...

  8. python 并发编程 同步调用和异步调用 回调函数

    提交任务的两张方式: 1.同步调用 2.异步调用 同步调用:提交完任务后,就在原地等待任务执行完后,拿到结果,再执行下一行代码 同步调用,导致程序串行执行 from concurrent.future ...

  9. Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程

    Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...

随机推荐

  1. [至顶网] Win2019 发布 LTSC 10年支持期

    Windows Server 2019新特性:Linux.HCI…… Windows Server 2019是微软公司长期服务渠道(简称LTSC)之下新一轮的迭代产品,其中囊括大量新的特性以及部分管理 ...

  2. JDBC的基础接口及其用法

    JDBC基础 所谓JDBC即是:Java DataBase Connectivity,java与数据库的连接.是一些用来执行SQL语句的Java API. 我们进行JDBC的编程,主要常用的几个概念: ...

  3. app流畅度测试--使用手机自带功能

    1.进入开发者选项,在“监控”选项卡找到“GPU呈现模式分析”的选项 2.开启后,即可以条形图和线形图的方式显示系统的界面相应速度 3.那么要如何根据曲线判断系统是否流畅呢?实际上这个曲线表达的是GP ...

  4. UVALive3713_Astronauts

    有n个宇航员,根据年龄限制,所有宇航员只能从事A或B中的一种任务,所有人都可以从事C的任务.有的宇航员之间相互讨厌,不能分在一组,求出一种满足条件的分配方案. 2sat.mark[]中i+i和i+i+ ...

  5. selenium实战之斗鱼弹幕

    python3.6.selenium.chromedriver 先上代码 from selenium import webdriver from time import sleep driver=we ...

  6. python selenium2 定位一组元素find_elements实例

    打开hao123首页,需要定位以上区域中的所有链接,他们有相同的父元素<ul class="js_bd site-bd site-hd0">,所有链接处在li>a ...

  7. 超计算(Hyper computation)模型

    超计算(Hyper computation)模型 作者:Xyan Xcllet链接:https://www.zhihu.com/question/21579465/answer/106995708来源 ...

  8. 【刷题】BZOJ 3514 Codechef MARCH14 GERALD07加强版

    Description N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数. Input 第一行四个整数N.M.K.type,代表点数.边数.询问数以及询问是否加密. 接下来 ...

  9. Statement和PreparedStatement之间的区别

    Statement和PreparedStatement之间的区别: 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程2.使用 Statement ...

  10. HIGH-SPEED PACKET PROCESSING USING RECONFIGURABLE COMPUTING

    摘要 本文介绍了一种新的工具链,它将一门称为 PX 的专门用于包处理的编程语言运用到基于 FPGA 技术的高性能可重构计算架构(HIGH-PERFORMANCE RECONFIGURABLECOMPU ...