【读书笔记】关于《精通C#(第6版)》与《C#5.0图解教程》中的一点矛盾的地方
这几天无聊看书,《精通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赞的答案,答案给了一个连接:
简单的看看了,文章中说是一个大佬长期误导了一些人,
理论上:
“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图解教程》中的一点矛盾的地方的更多相关文章
- 【Todo】【读书笔记】机器学习实战(Python版)
还是把这本书的读书笔记,单独拎出来吧,因为内容比较多. P38. Logistic 回归. 觉得还蛮实用的.囫囵吞枣看的.要细看.
- [读书笔记]Hadoop权威指南 第3版
下面归纳概述了用于设置MapReduce作业输出的压缩格式的配置属性.如果MapReduce驱动使用了Tool接口,则可以通过命令行将这些属性传递给程序,这比通过程序代码来修改压缩属性更加简便. Ma ...
- 【C#4.0图解教程】笔记(第19章~第25章)
第19章 泛型 1.泛型概念 泛型提供了一种更准确地使用有一种以上的类型的代码的方式. 泛型允许我们声明类型参数化的代码,我们可以用不同的类型进行实例化. 泛型不是类型,而是类型的模板. 2.声明 ...
- 【C#4.0图解教程】笔记(第9章~第18章)
第9章 语句 1.标签语句 ①.标签语句由一个标识符后面跟着一个冒号再跟着一条语句组成 ②.标签语句的执行完全如同标签不存在一样,并仅执行冒号后的语句. ③.给语句添加一个标签允许控制从代码的另一部分 ...
- 【C#4.0图解教程】笔记(第1章~第8章)
第1章 C#和.NET框架 1..NET框架的组成 .NET框架由三部分组成(严格来说只有CLR和FCL(框架类库)两部分),如图 执行环境称为:CLR(公共语言运行库),它在运行期管理程序的执行. ...
- Sprint总结和第八九十的读书笔记
总结:经过这次的Sprint,我在从中收获了很多.作为产品负责人的我,主要责任就是合理分配任务给自己的队友,调动队友的积极性.虽然这其中也有些不尽人意的地方,但是我们都坚持的走了过来,团队合作真的很重 ...
- 《沉静领导》读书笔记zz
就 像作者说的,这本书“只是一篇简单的随笔,它描绘并阐明了一种关于领导之道的思考方式,并且为把这种思考方式应用到实际行动中提供了指南.”但是,仔细想 来,倒有一点不同见解,或许,它描述的不可以叫做“领 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 《JavaScript面向对象编程指南(第2版)》读书笔记(一)
目录 一.对象 1.1 获取属性值的方式 1.2 获取动态生成的属性的值 二.数组 2.1 检测是否为数组 2.2 增加数组长度导致未赋值的位置为undefined 2.3 用闭包实现简易迭代器 三. ...
随机推荐
- 洛谷P-4782 2-sat+Tarjan
https://www.luogu.org/problemnew/solution/P4782 这里的大佬已经说的够好了 #include<iostream> #include<cs ...
- jetbrains全家桶 你懂得
这个是松哥说的引用一下: 昨天一直在忙,中午抽空瞅了一眼技术群,天呐,竟然都在切磋 IDEA 激活码的事情,瞬间明白可能 jetbrains 又在搞事情了. 我大概了解了下,这次出事的主要是 2019 ...
- 2020了你还不会Java8新特性?(五)收集器比较器用法详解及源码剖析
收集器用法详解与多级分组和分区 为什么在collectors类中定义一个静态内部类? static class CollectorImpl<T, A, R> implements Coll ...
- 【C++】CCFCSP201803-2碰撞的小球
// // main.cpp // CCFCSP20180318_2_碰撞的小球 // // Created by T.P on 2018/3/24. // Copyright © 2018年 T.P ...
- 机器学习回顾篇(13):集成学习之AdaBoost
.caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...
- 负载均衡基本原理与lvs
前言: 之前在山西的项目上使用的是lvs下的NAT模式,但另外两个模式并没有涉及,今天系统的整理下关于负载均衡的相关理论与lvs各模式的相关优点与不足,知其然与所以然,而后能针对性的应用: 基本介绍 ...
- linux下安装mysql5.7.25详细教程
前言 最近项目上线,开始给用户测试了.搞下来好多台服务器,自然要装一个mysql的服务器.想想广大博友应该都会遇到如何装mysql的问题,就此分享,给大家一个安装指南.供大家以后安装的时候,提高效率, ...
- ffmpeg参数编码大全
ffmpeg version N-49044-g89afa63 Copyright (c) 2000-2013 the FFmpeg developers built on Jan 19 2013 2 ...
- infer 代码静态分析
infer 代码静态分析 静态代码分析工具,主要是为了提高我们的代码质量. 通常,我们提高代码质量的方式是通过CodeReview,但是这个过程耗费的人工和时间往往较大.并且随着代码量的增加人肉检测起 ...
- 转型IT学什么语言好,学编程语言为何要重视代码规范?
造价转IT需要注意什么,先学什么比较好?属于零基础,2019毕业,三本学校,男.自己的想法是先以副业来学习,在合适的时候转入it行业.1.以副业来学的话应该先学习什么比较好?2.如果要直接找工作的话先 ...