摘要:
1,异步编程 异步编程就是使用future模式(又称promise)或者回调机制来实现(Non-blocking on waiting)。 如果使用回调或事件来实现(容易callback hell),不仅编写这样的代码不直观,很快就容易把代码搞得一团糟。不过在.NET 4.5(C# 5)中引入的as
阅读全文
posted @ 2022-02-17 17:42
小林野夫
阅读(160)
推荐(1)
摘要:
使用条件 1、必须熟练掌握锁、死锁、task的知识,他是建立这两个的基础上的。task建立在线程和线程池上的。 2、并不是所有代码都适合并行化。 例如,如果某个循环在每次迭代时只执行少量工作,或它在很多次迭代时都不运行,那么并行化的开销可能导致代码运行更慢。 3、 Parallel.For()和Pa
阅读全文
posted @ 2022-02-17 16:55
小林野夫
阅读(145)
推荐(0)
摘要:
前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel。 Channel在% dotnet add package System.Threading.Channels 而在Core 3.0 preview 7开始,就直接包含在框架中了。 是一个相对较新的特性。从Core 2.
阅读全文
posted @ 2022-02-17 02:10
小林野夫
阅读(2321)
推荐(2)
摘要:
概要 1、如果异步方法的使用者使用 Task.WhenAll 或 Task.WhenAny,则在异步方法中使用 ValueTask<T> 作为返回类型可能会产生高昂的成本。这是因为您需要使用 AsTask 方法将 ValueTask<T> 转换为 Task<T>这将产生一个分配,如果首先使用了缓存的
阅读全文
posted @ 2022-02-17 01:55
小林野夫
阅读(1211)
推荐(1)
摘要:
[MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展)
阅读全文
posted @ 2022-02-16 14:08
小林野夫
阅读(4550)
推荐(1)
摘要:
5,MethodImpl 特性 此特性在 System.Runtime.CompilerServices 命名空间中,指定如何实现方法的详细信息。 内联函数使用方法可参考 https://www.whuanle.cn/archives/995 作用域:MethodImpl 特性可以影响 JIT 编译
阅读全文
posted @ 2022-02-16 13:42
小林野夫
阅读(3475)
推荐(2)
摘要:
函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内部执行。这个过程是要耗费时间的。 C# 函数执行 return 语句返回时,需要从栈中回收形参和局部
阅读全文
posted @ 2022-02-16 13:26
小林野夫
阅读(176)
推荐(0)
摘要:
首先要指导GC的机制,这部分转载自:http://blog.csdn.net/qq_20949153/article/details/52188882CLR:公共运行时环境,管理托管堆。CTR:设置引用类型,值类型。GC:只负责回收托管对象,不负责回收非托管对象。垃圾回收器的基本假定: 1.被分配内
阅读全文
posted @ 2022-02-16 13:17
小林野夫
阅读(708)
推荐(0)
摘要:
原文:https://python.iitter.com/other/47604.html 前言 在上篇文章浅谈C#取消令牌CancellationTokenSource[1]一文中我们讲解了CancellationTokenSource,它的主要功能就是分发一个令牌,当我取消令牌我可以进行一些回调
阅读全文
posted @ 2022-02-15 15:55
小林野夫
阅读(370)
推荐(0)
摘要:
原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获。 七年前(原文发布于2019年).NET的编程语言和框架库添加了async/await语法糖。自那
阅读全文
posted @ 2022-02-12 19:29
小林野夫
阅读(1506)
推荐(1)
摘要:
原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题。能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值。这种概念很难融入现有的语言。awaitTask<T> 底线是不允许构造函数,因此让我们探索一些替代方
阅读全文
posted @ 2022-02-12 17:55
小林野夫
阅读(470)
推荐(0)
摘要:
在我们深入研究"异步OOP"之前,让我们解决一个相当常见的问题:如何处理异步方法的继承?那么"异步接口"呢? 幸运的是,它确实可以很好地与继承(和接口)一起使用。请记住,这是一个实现细节,因此无法使用 定义接口。要在接口中定义异步方法,只需定义具有相同签名的方法,减去关键字:async 如下: in
阅读全文
posted @ 2022-02-12 17:24
小林野夫
阅读(178)
推荐(0)
摘要:
[MethodImpl(MethodImplOptions.Synchronized)]与lock机制 在进行.NET开发时,经常会遇见如何保持线程同步的情况。在众多的线程同步的可选方式中,加锁无疑是最为常用的。如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerSe
阅读全文
posted @ 2022-02-11 18:12
小林野夫
阅读(314)
推荐(0)
摘要:
在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息。所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解决程序中出现的问题,这种调试也被称为是非中断调试。输出调试信息的类保存在 System.Diagno
阅读全文
posted @ 2022-02-11 16:57
小林野夫
阅读(1781)
推荐(0)
摘要:
概览 在学task类之前必须学习线程的知识。 以下是task命名空间的类的结构图 1、2种任务类型: 有返回值task<TResult> 、无返回值task。 2、2座任务工厂 TaskFactory/TaskFactory<TResult> 3、2种TaskCompletionSource/Tas
阅读全文
posted @ 2022-02-09 16:32
小林野夫
阅读(1042)
推荐(0)
摘要:
TaskCompletionSource具体功能 用于封装一个没有不带委托的任务实列。可以在其他线程控制该任务实列什么时候结束、取消、错误。类似于EventWaitHandle的功能。 属性 Task 方法 SetCanceled:将TaskCompletionSource.Task 转换为Canc
阅读全文
posted @ 2022-02-09 11:19
小林野夫
阅读(7970)
推荐(3)
摘要:
TaskContinuationOptions 根据 TaskContinuationOptions 的不同,出现了三个分支 LongRunning:独立线程,和线程池无关 包含 PreferFairness时:preferLocal=false,进入全局队列 不包含 PreferFairness时
阅读全文
posted @ 2022-02-06 13:11
小林野夫
阅读(1214)
推荐(2)
摘要:
[No0000152]C#基础之IL,轻松读懂IL 先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用。到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西。其实IL本身逻辑很清楚,主要是把指令的意思搞明白就好办了。记指令只要
阅读全文
posted @ 2022-02-06 10:29
小林野夫
阅读(1965)
推荐(0)
摘要:
转载自:https://www.cnblogs.com/zkweb/p/7687737.html 很多C#的初学者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C#会通过编译器(CodeDom, Roslyn)编译成IL代码, 然后CLR(.Net Framewo
阅读全文
posted @ 2022-02-06 10:17
小林野夫
阅读(162)
推荐(0)
摘要:
背景 由于枚举器存在遍历二叉树不方便的问题。才有了迭代器。在了解了迭代器之前必须了解枚举器。 迭代器就是带了状态机的枚举器。 基本介绍 1)迭代器模式( lterator Pattern)是常用的设计模式,属于行为型模式2)如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还
阅读全文
posted @ 2022-01-30 17:12
小林野夫
阅读(1120)
推荐(1)
摘要:
总结: 1、枚举器就像是序列中的“游标”或“书签”。可以有多个“书签”,移动其中任何一个都可以枚举集合,与其他枚举器互不影响。用来遍历数据结构(单项表链、数组、集合类成员等)。 2、可以使用foreach 遍历枚举器。foreach 用来遍历鸭子类型.点击查看foreach详细用法 什么是枚举器 实
阅读全文
posted @ 2022-01-30 14:43
小林野夫
阅读(3993)
推荐(1)
摘要:
背景..什么是继承? 「继承」是对象导向编程的其中一个基本属性。 它可让您定义子类,重复使用(继承)、扩充或修改父类别行为。 其成员可供继承的类别称为基底类别。 继承基底类别成员的类别则称为「衍生类别」。 C# 和 .NET 只支持「单一继承」。 也就是说,类别只能继承自单一类别。 不过,继承可以转
阅读全文
posted @ 2022-01-30 07:29
小林野夫
阅读(125)
推荐(0)
摘要:
CoreCLR是微软新出的跨平台公共语言运行时,和之前的CLR不同的是前者砍掉了大部分不常用功能,优化了代码,而且不依赖于类似于iis这样的软件,是由线程来进行维护的,程序集领域也是由线程来管理,在吞吐量和运行效率上来说都大大提升。 不过你们也不要担心之前学的CLR会不会没用,白学了,做了无用功,这
阅读全文
posted @ 2022-01-29 23:17
小林野夫
阅读(718)
推荐(0)
摘要:
as(OpCodes.Castclass)功能:测试对象引用(O 类型)是否为特定类的实例。相当于:expression is type ? (type)expression : (type)null 做类型检测判断,如果类型兼容则转换,否则返回null只是as 只被计算一次。 使用规则: 1、as
阅读全文
posted @ 2022-01-29 23:05
小林野夫
阅读(288)
推荐(0)
摘要:
"面向对象设计五大原则"和良性依赖原则在应付变化方面的作用。 SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转) 单一职责原则(Single-Resposibility Principle)。"对一个类而言,应该仅有一个引起它变化的原因。"本原则是我们非常熟悉地"高内聚性原则"的引申,
阅读全文
posted @ 2022-01-29 06:54
小林野夫
阅读(133)
推荐(0)
摘要:
字节码(英语:Bytecode)将虚拟机可以读懂的代码称之为字节码。将源码编译成虚拟机读的懂的代码,需要虚拟机转译后才能成为机器代码的中间代码 叫做字节码。 字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。字节码的实现方式是通过编译器和虚拟机。编译器将源码编译成字节码,特定平台上的虚拟机将
阅读全文
posted @ 2022-01-28 23:48
小林野夫
阅读(710)
推荐(0)
摘要:
编程范型、编程范式paradigm(philosophy)或程式設計法(英語:Programming paradigm),是指软件工程中的一类典型的编程风格。常见的编程范型有:函數式編程、指令式编程、过程式编程、面向对象编程等等。 编程范型提供并决定了程序员对程序执行的看法。例如,在面向对象编程中,
阅读全文
posted @ 2022-01-28 20:16
小林野夫
阅读(294)
推荐(0)
摘要:
重载 同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个。而返回值类型不同是不能构成重载的。 作用: 重载必须发生在一个类中,函数名相同,参数类型或者个数可以不同,返回值类型可以不同。根据参数选择调用方法。重载就是让类以统
阅读全文
posted @ 2022-01-28 14:58
小林野夫
阅读(1944)
推荐(0)
摘要:
今天,我们再来学习 SOLID 中的“L”对应的原则:里式替换原则。 里氏替换原则 里氏替换原则(Liskov Substitution Principle):派生类(子类)对象能够替换其基类(超类)对象被使用。通俗一点的理解就是“子类是父类”,举个例子,“男人是人,人不一定是男人”,当需要一个父类
阅读全文
posted @ 2022-01-28 14:32
小林野夫
阅读(532)
推荐(0)
摘要:
根据 TaskCreationOptions 的不同,出现了三个分支 LongRunning:独立线程,和线程池无关 包含 PreferFairness时:preferLocal=false,进入全局队列 不包含 PreferFairness时:preferLocal=ture,进入本地队列 进入全
阅读全文
posted @ 2022-01-27 05:49
小林野夫
阅读(4129)
推荐(1)
摘要:
windows消息机制框架原理 结合两张图理解 窗口和窗口类 Windows UI 应用程序 (e) 具有一个主线程 (g)、一个或多个窗口 (a) 和一个或多个子线程 (k) [工作线程或 UI 线程]。 应用程序必须指定窗口类并向 Windows (d) 注册,然后才能创建窗口 (a) 并显示。
阅读全文
posted @ 2022-01-26 15:54
小林野夫
阅读(858)
推荐(0)
摘要:
一、什么是HOOK(钩子) API Windows消息传递机制,当在应用程序进行相关操作,例如点击鼠标、按下键盘,操作窗口等,操作系统能够感知这一事件,接着把此消息放到系统消息队列,然后到应用程序的消息序列中,应用程序通过Getmessage函数取出消息,然后调用DispatchMessage函数将
阅读全文
posted @ 2022-01-26 09:49
小林野夫
阅读(6859)
推荐(0)
摘要:
什么是TaskScheduler? SynchronizationContext是对“调度程序(scheduler)”的通用抽象。个别框架会有自己的抽象调度程序,比如System.Threading.Tasks。当Tasks通过委托的形式进行排队和执行时,会用到System.Threading.Ta
阅读全文
posted @ 2022-01-26 09:21
小林野夫
阅读(9073)
推荐(5)
摘要:
背景 用到的知识点 1、windows消息机制 备注:鼠标点击、键盘等事件产生的消息要放入系统消息队列,然后再分配到应用程序线程消息队列。软件PostMessage的消息直接进入应用程序线程消息队列,不需要经过系统消息队列。软件SendMessage()的消息直接进入 DispatchMessage
阅读全文
posted @ 2022-01-26 00:40
小林野夫
阅读(803)
推荐(0)
摘要:
起因 在看操作系统消息机制的时候,看到一句化:全局消息队列把消息发送到窗口所在的线程消息队列。突然就怀疑起了窗口的意思。于是就有这边基类。 文章来源:https://docs.microsoft.com/zh-cn/windows/win32/learnwin32/what-is-a-window-
阅读全文
posted @ 2022-01-25 22:43
小林野夫
阅读(2577)
推荐(1)
摘要:
句柄是指针的“指针” 指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用A
阅读全文
posted @ 2022-01-25 22:32
小林野夫
阅读(608)
推荐(1)
摘要:
里氏转换 子类可以赋值给父类。(如果有一个地方需要一个父类作为参数,我们可以给一个子类 ) 如果父类中装的是子类对象,那么可以将这个父类强转为子类对象。 创建几个类帮助我们理解: using System; using System.Collections.Generic; using System
阅读全文
posted @ 2022-01-24 17:54
小林野夫
阅读(710)
推荐(1)
摘要:
案例是模仿java https://blog.csdn.net/bjfu170203101/article/details/109322590 改用C#:开发环境 vs2022/vscode .net6.0 C#10 开发时长:完全掌握知识点一天就可以完成 、新手估计要2-3周,因为很多知识点 必须
阅读全文
posted @ 2022-01-24 08:25
小林野夫
阅读(748)
推荐(0)
摘要:
这种情况可能发生在当两个线程尝试获取其他资源的锁,而每个线程又陷入无线等待其他资源锁的释放,除非一个用户的进程被终止。线程死锁可能发生在以下的情况:当两个线程相互调用Thread.join();当两个线程使用嵌套的同步块时,一个线程占用了另一个线程的必需的锁,互相等待时被阻塞,就有可能出现死锁。举例
阅读全文
posted @ 2022-01-21 02:30
小林野夫
阅读(3552)
推荐(0)
摘要:
详细情况:https://www.cnblogs.com/wucy/p/15128365.html 背景 为什么引入取消令牌? Thread.abort()方法会破坏同步锁中代码的原子逻辑,破坏锁的作用。以下代码说明了Thread.abort()方是如何破坏锁的 :代码的功能:每个线程进入锁内都会休
阅读全文
posted @ 2022-01-19 11:17
小林野夫
阅读(1714)
推荐(0)