C#:Func的同步、异步调用
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的同步、异步调用的更多相关文章
- dubbo同步/异步调用的方式
我们知道,Dubbo 缺省协议采用单一长连接,底层实现是 Netty 的 NIO 异步通讯机制:基于这种机制,Dubbo 实现了以下几种调用方式: 同步调用(默认) 异步调用 参数回调 事件通知 同步 ...
- .Net下的MSMQ(微软消息队列)的同步异步调用
一.MSMQ简介 MSMQ(微软消息队列)是Windows操作系统中消息应用程序的基础,是用于创建分布式.松散连接的消息通讯应用程序的开发工具.消息队列 和电子邮件有着很多相似处,他们都包含多个属性, ...
- jQuery同步/异步调用后台方法
$.ajax({ type: "Post", url: "UserManage.aspx/SubmitPage",//页面/方法名 data: "{' ...
- ajax 同步异步调用
- C#:Func的同步、异步调用(转)
实际开发中,对于一些耗时较长的操作,我们往往会将其封装成异步方式调用,以加速系统响应或改善用户体验,下面是一个示例: 有一个现成的类MyMath,里面有一个Add方法: 1 public class ...
- C# Func的同步、异步调用
using System; namespace ActionDemo { class Program { static void Main(string[] args) { Console.Write ...
- C#的同步和异步调用方法
同步和异步大家都明白什么意思,在这里不多介绍了. namespace ConsoleTest { class Program { static void Main(string[] args) { C ...
- python 并发编程 同步调用和异步调用 回调函数
提交任务的两张方式: 1.同步调用 2.异步调用 同步调用:提交完任务后,就在原地等待任务执行完后,拿到结果,再执行下一行代码 同步调用,导致程序串行执行 from concurrent.future ...
- Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程
Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...
随机推荐
- 熟用js中的Date
js中的Date类型是使用UTC(国际协调时间)自1970年1月1日午夜(零时)开始,经过的毫秒数来保存日期. 1. 创建日期对象 ---> 获得当前日期和时间 var now = new ...
- 如何开始DDD(完)
连续写了两篇文章,这一篇我想是序的完结篇了.结合用户注册的例子再将他简单丰富一下.在这里只添加一个简单需求,就是用户注册成功后给用户发一封邮件.补充一下之前的代码 public class Domai ...
- 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析
自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- 虚拟化平台cloudstack(5)——参考资料
虚拟化的几种方式 完全虚拟化: 半虚拟化: 硬件辅助虚拟化: 详细的内容可以看: http://pan.baidu.com/share/link?shareid=4134188256&uk=2 ...
- 为 Exchange 服务器编写自定义的反垃圾插件
Exchange 2010 的 Edge Transport 包含了一些 Anti-spam 的 Feature,如图: 都开启了,但是呢,还是会有漏网之鱼,而且把这些邮件自己列为 Junk 也起不了 ...
- 【SVN多用户开发】代码冲突&解决办法
SVN是一款集中式的代码存储工具,可以帮助多个用户协同开发同一应用程序. 但是SVN不能完全代替人工操作,有时也需要程序员自己进行沟通确认有效的代码. 下面就简单的看一下,常见的代码冲突以及解决方法. ...
- SlickUpload Upload to disk
The file upload stream provider is a built-in SlickUpload provider that uses the filesystem for uplo ...
- angularjs定义全局变量
angularjs定义全局变量 三种方法 直接外层定义全局变量 利用ng的value定义全局变量 利用ng的constant定义全局变量 Takl is cheap, Show me the code ...
- 高并发、海量数据处理尽量少使用using也能提升效率
请看下面两段: 第一种方式: MemoryStream stream = new MemoryStream(); string text = "aasasdfasdfad;sas;fkqew ...
- vsCode 添加浏览器调试和js调试的方法
1.直接按F5可以调试的方法或者点击运行按钮(可以直接运行html文件或者js文件) 在launch.json文件中的配置如下: { "version": "0. ...