志铭-2020年2月8日 03:32:03

这几天无聊看书,《精通C#》和《C#图解教程》,几本书对比者看,都是旧版本的书,发现两本书中的一个矛盾的地方:

《精通C#(第6版)》P571:说明:“如果异步调用一个无返回值的方法,仅仅调用BeginInvoke()就可以了。在这种情况下,我们不需要缓存IAsyncResult兼容对象,也不需要首先调用EndInvoke()(因为没有收到返回值)。”

《C#5.0图解教程》P432:说明:“因为EndInvoke是为开启的线程进行清理,所以必须确保对每一个BeginInvoke都调用EndInvoke。”

两本书中对此的观点不一样。


这是一个旧问题,很久很久以前大家就讨论了,

哈哈哈,而且这是一个很无聊的问题,!

只是以前我不了解,今天我遇到了,故记录于此。

其实关于BeginInvoke()和EndInvoke()是否一定要配对使用,是不是可以省略EndInvoke()的讨论有很多,而且现在几乎就没有人在查阅这个问题了,因为现在大家都不在使用APM异步编程模式了!

但是既然我遇到了,那我就查一查呗

网上讨论可以参考:

博客园:BeginInvoke 如果不调用EndInvoke会怎么样?

CSDN : C#异步委托BeginInvoke是否必须和EndInvoke成对调用?

路人甲说:BeginInvoke()和EndInvoke()必须配对使用,以便清理线程池资源,

路人乙说:只要你不需要接收异步操作的返回值且不查看异步操作的状态就可以不调用EndInvoke(),而且即使不用EndInvoke()清理线程,GC也会很快的清理用完的Delegate对象。

查阅StackOverFlow:Is EndInvoke() optional, sort-of optional, or definitely not optional?

可以看到最高赞答案如下,截图翻译了一下:

简单的说在MSDN中两中说法都有,写不写都可以!

好吧,一般我查阅问题可能就得出结论了,嘿嘿,但是我手贱又看了下面的一个18赞的答案,答案给了一个连接:

文章连接EndInvoke Not Optional,

简单的看看了,文章中说是一个大佬长期误导了一些人,

理论上:
CAUTION Always call EndInvoke after your asynchronous call completes.”(注意,异步调用完成后一定要调用EndInvoke)

其次,文章提到:
Microsoft obviously have the right to relax this requirement in the future if they want to, but for now, you have to call EndInvoke.

简单的翻译一下:微软显然有权利在将来放宽这一要求,但现在,您必须调用EndInvoke(哈哈,这句是2005年以前的情形,现在如何,就不考证了,嘿嘿!)

其实呀,简而言之,调用EndInvoke一定没坏处


我的理解就是,在没有返回值的引用函数时实现异步,不使用EndInvoke,

就是相当于async & await关键字实现返回值为void的异步方法,

即不需要对该异步方法进一步交互,称之为:调用并忘记(fire and forget),

许多时候异步编程就是需要这样呀!只是现在我们一般都不使用APM模式罢了!

【读书笔记】关于《精通C#(第6版)》与《C#5.0图解教程》中的一点矛盾的地方的更多相关文章

  1. 【Todo】【读书笔记】机器学习实战(Python版)

    还是把这本书的读书笔记,单独拎出来吧,因为内容比较多. P38. Logistic 回归. 觉得还蛮实用的.囫囵吞枣看的.要细看.

  2. [读书笔记]Hadoop权威指南 第3版

    下面归纳概述了用于设置MapReduce作业输出的压缩格式的配置属性.如果MapReduce驱动使用了Tool接口,则可以通过命令行将这些属性传递给程序,这比通过程序代码来修改压缩属性更加简便. Ma ...

  3. 【C#4.0图解教程】笔记(第19章~第25章)

    第19章 泛型 1.泛型概念 泛型提供了一种更准确地使用有一种以上的类型的代码的方式. 泛型允许我们声明类型参数化的代码,我们可以用不同的类型进行实例化. 泛型不是类型,而是类型的模板.   2.声明 ...

  4. 【C#4.0图解教程】笔记(第9章~第18章)

    第9章 语句 1.标签语句 ①.标签语句由一个标识符后面跟着一个冒号再跟着一条语句组成 ②.标签语句的执行完全如同标签不存在一样,并仅执行冒号后的语句. ③.给语句添加一个标签允许控制从代码的另一部分 ...

  5. 【C#4.0图解教程】笔记(第1章~第8章)

    第1章 C#和.NET框架 1..NET框架的组成 .NET框架由三部分组成(严格来说只有CLR和FCL(框架类库)两部分),如图 执行环境称为:CLR(公共语言运行库),它在运行期管理程序的执行. ...

  6. Sprint总结和第八九十的读书笔记

    总结:经过这次的Sprint,我在从中收获了很多.作为产品负责人的我,主要责任就是合理分配任务给自己的队友,调动队友的积极性.虽然这其中也有些不尽人意的地方,但是我们都坚持的走了过来,团队合作真的很重 ...

  7. 《沉静领导》读书笔记zz

    就 像作者说的,这本书“只是一篇简单的随笔,它描绘并阐明了一种关于领导之道的思考方式,并且为把这种思考方式应用到实际行动中提供了指南.”但是,仔细想 来,倒有一点不同见解,或许,它描述的不可以叫做“领 ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 《JavaScript面向对象编程指南(第2版)》读书笔记(一)

    目录 一.对象 1.1 获取属性值的方式 1.2 获取动态生成的属性的值 二.数组 2.1 检测是否为数组 2.2 增加数组长度导致未赋值的位置为undefined 2.3 用闭包实现简易迭代器 三. ...

随机推荐

  1. java引用类型的浅拷贝与深拷贝理解

    1.浅拷贝 只会复制地址值,也就是同一个对象两个引用,只是复制了一个引用而已. 2.深拷贝 重新在堆里创建一个新对象给新引用,连同地址值也不一样. 首先要知道Object的clone()方法, pub ...

  2. vue实现下拉框全选和输入匹配

    实际项目中的一个需求: 点击文本框,弹出带有复选框的选项,然后获取选中项的数据,传给后面的一个功能.在文本框输入内容,也会动态的匹配下拉列表,并且列表带有全选功能. 朴素的效果图: 我选择了用vue实 ...

  3. QT信号和槽函数学习笔记

    //connect 函数有4个参数 分别是 发送者 信号.接受者 ,槽 //connect(sender,signal,receiver,slot) /* * 信号和槽 * 信号 就是一个普通的函数 ...

  4. 洛谷$P4001\ [ICPC-Beijing 2006]$狼抓兔子 网络流+对偶图

    正解:网络流+对偶图 解题报告: 传送门! $umm$日常看不懂题系列了$kk$.其实就是说,给定一个$n\cdot n$的网格图,求最小割$QwQ$ 然后网格图的话显然是个平面图,又看到数据范围$n ...

  5. 高校表白app用后感

    此款app前提是我们自行设计研发的app,其次满足了在校大学生对谈恋爱的需求,可以说是一款简单实用,好操作的软件.下面我根据自己的使用体验简单的介绍一下此软件: (1)首先对于未使用过的用户,你需要在 ...

  6. Centos虚拟机安装指南

    按照文档安装有任何问题,欢迎随时留言 ·准备工作: linux发行版CentOS镜像下载地址: http://isoredirect.centos.org/centos/7/isos/x86_64/ ...

  7. docker-代理服务器

    配置Docker以使用代理服务器 如果容器需要使用HTTP,HTTPS或FTP代理服务器,则可以通过不同方式对其进行配置: 在Docker 17.07及更高版本中,可以 将Docker客户端配置为自动 ...

  8. 【python小随笔】将一个列表的值,分成10个一组,遍历的时候每10个遍历一次

    t = ['B071LF9R6G', 'B0714BP3H4', 'B0756FL8R7', 'B072HX95ZR', 'B07CX389LX', 'B07D9MZ7BD', 'B07D9L15L5 ...

  9. 【转】Beyond compare4密钥

    转:https://blog.csdn.net/lemontree1945/article/details/92963423 w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPc ...

  10. 详解定时任务中的 cron 表达式

    1.前言 我们经常使用 cron 表达式来定义定时任务的执行策略,今天我们就总结一下 cron 表达式的一些相关知识. 2. cron 表达式的定义 cron 表达式是一个字符串,该字符串由 6 个空 ...