志铭-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. 组长组Beta阶段贡献分配规则

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9910“ “组长”组贡献分分配规则: 组里五位成员分别有入团队贡献分10分 ...

  2. 基于WPF&Prism&AvalonEdit的XAML轻量编辑器

    1. 写在前面 一直从事WPF的相关开发工作,有时为了尝试或演示某些仅仅基于XAML的效果时,但又不想大动干戈打开VS去创建项目,所以一个轻便简单,集编辑与预览于一身的XAML编辑器就显得格外重要. ...

  3. Spring Security详解

    Spring Security 一. 简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文 ...

  4. 「Luogu P2015」二叉苹果树 解题报告

    题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...

  5. 更换EMC VNX系列存储故障硬盘的检查步骤

    更换EMC VNX系列存储故障硬盘的检查步骤 VNX1代(VNX5300,VNX5500,VNX5700,VNX7500和VNX2代(VNX5400,5600,5800和VNX7600,8000)有区 ...

  6. RHEL6.6安装Oracle 11g RAC - 基于VMware的实验环境

    实验环境准备虚拟机:VMware® Workstation 14 Pro操作系统:Red Hat Enterprise Linux 6.6 x86_64rhel-server-6.6-x86_64-d ...

  7. SpringBoot-2.1.1系列二:使用websocket

    1.什么是websocket? WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. 2.为什么需要使用 ...

  8. 注解@ConfigurationProperties使用方法

    注解@ConfigurationProperties使用方法 前言 最近在思考使用java config的方式进行配置,java config是指基于java配置的spring.传统的Spring一般 ...

  9. 关于AWD线下攻防的经验

    备份:     1.备份源码,使用图像化工具连接ssh后,我喜欢用winscp,         找到根目录后,直接右键后台下载就行.           找根目录这里,有时候比赛不给根目录位置,上次 ...

  10. Centos7 编译安装PHP7

    Centos7 编译安装PHP7 编译安装的方式可以让组件等设置更加合理,但需要你对PHP的代码及各种配置非常的熟悉,以下为大致的安装流程,大家可以参考 1.下载编译工具 yum groupinsta ...