基于使用BeginInvoke,EndInvoke异步调用委托的实现代码
发布时间:2023-04-29 09:46:49
标签:BeginInvoke,EndInvoke,异步调用委托
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main ThreadId = " + Thread.CurrentThread.ManagedThreadId);
//给委托赋值
Func<long, long> delegateMethod = new Func<long, long>(CalcSum);
//异步执行委托,这里把委托本身作为asyncState对象传进去,在回调函数中需要使用委托的EndInvoke来获得结果
delegateMethod.BeginInvoke(200, DoneCallback, delegateMethod);
//异步执行委托,抛出异常
delegateMethod.BeginInvoke(10000000000, DoneCallback, delegateMethod);
Console.ReadLine();
}
//委托回调函数
static void DoneCallback(IAsyncResult asyncResult)
{
//到这儿委托已经在异步线程中执行完毕
Console.WriteLine("DoneCallback ThreadId = " + Thread.CurrentThread.ManagedThreadId);
Func<long, long> method = (Func<long, long>)asyncResult.AsyncState;
//委托执行的异常会在EndInvoke时抛出来
try {
//使用BeginInvoke时传入委托的EndInvoke获得计算结果,这时候计算结果已经出来了,有异常的话也在这儿抛出来
long sum = method.EndInvoke(asyncResult);
Console.WriteLine("sum = {0}",sum);
}
catch (OverflowException)
{
Console.WriteLine("运算溢出了");
}
}
//委托方法
static long CalcSum(long topLimit)
{
//委托在另一个线程中开始执行
Console.WriteLine("Calc ThreadId = " + Thread.CurrentThread.ManagedThreadId);
checked
{
long result = 0;
for (long i = 0; i < topLimit; i++)
{
result += i;
}
return result;
}
}
}
}


猜你喜欢
- 之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现。查询的资料,找到三种方法:1.用coo
- java ,javaw 和 javaws 的区别:首先,所有的这些都是java的启动装置,java.e
- 在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删
- 由于经常用到文件处理,便自己封装了下 分享给大家。 包含写入文本 批量删除文件 下载文件 。--可直接使用/// <summary&g
- 项目中用到WebView加上进度条放在顶部,让用户知道加载进度情况,可以提高用户体验:效果:布局:<RelativeLayoutand
- SpringBoot配置文件的替换使用spring.profiles.active在工作中,测试或上线的时候一定会遇到的问题就是修改配置。一
- 最近做了一个文件上传、下载、与在线打开文件的功能,刚开始对文件上传的界面中含有其它表单(例如输入框、密码等)在上传的过程中遇到了许多问题,下
- 笔者发现在很多应用中,都有自动获取验证码的功能:点击获取验证码按钮,收到短信,当前应用不需要退出程序就可以获取到短信中的验证码,并自动填充。
- Android 3.0引入了CursorLoader实现异步加载数据,为了避免同步查询数据库时阻塞UI线程的问题。在API 11之前可以通过
- 前言有时,我们可能需要从 PDF 文档中提取表格数据,例如,当PDF发票的表格中存储了一些有用的信息,需要提取数据以进行进一步分析时。在这篇
- 本文实例为大家分享了Java Socket聊天室功能的具体代码,供大家参考,具体内容如下Client.javaimport java.io.
- 一、智能指针-唯一所有者boost::scoped_ptr 是一个智能指针,它是动态分配对象的唯一所有者。 boost::scoped_pt
- 关于modelandview跳转问题小白刚刚开始学习使用springmvc框架,配置好简单的web.xml文件和springmvc的配置文件
- 很认真的写的一个java版的贪吃蛇游戏,图形界面,支持菜单操作,键盘监听,可加速,减速,统计得分,设定运动速度,设定游戏背景颜色等!应该没有
- 本文实例为大家分享了Android文件下载功能的具体代码,供大家参考,具体内容如下1.普通单线程下载文件:直接使用URLConnection
- 混合事务在ORM框架的事务管理器的事务内,使用JdbcTemplate执行SQL是不会纳入事务管理的。下面进行源码分析,看为什么必须要在Da
- 下载IDEA插件IDEA插件选择版本号下载与IDEA版本号相近的插件打开IDEA,导入下载好的插件在File下找到setting在Plugi
- 代码如下所示:using System;using System.Collections.Generic;using System.Text
- 本文实例为大家分享了java实现简单的图书管理系统的具体代码,供大家参考,具体内容如下一、项目分布Book类: 定义了书的一些属性(书名,作
- 前言在Java 8之前,默认情况下,接口中的所有方法都是公共的和抽象的。但是这一限制在Java 8中被打破了,Java 8允许开发人员在接口