共计 8 篇文章

为什么不要使用 async void ?

问题 在使用 Abp 框架的后台作业时,当后台作业抛出异常,会导致整个程序崩溃。在 Abp 框架的底层执行后台作业的时候,有 try/catch 语句块用来捕获后台任务执行时的异常,但是在这里没有生效。 原始代码如下: public class TestAppService : ITestAppService { private readonly IBackgroundJobManager _backgroundJobManager; public TestAppService(IBackgroundJobManager ...

C# 多线程学习笔记 - 3

[TOC] 一、基于事件的异步模式 基于事件的异步模式 (event-based asynchronous pattern) 提供了简单的方式,让类型提供多线程的能力而不需要显式启动线程。 协作取消模型。 工作线程完成时安全更新 UI 的能力。 转发异常到完成事件。 EAP 仅是一个模式,需要开发人员自己实现。 EAP 一般会提供一组成员,在其内部管理工作线程,例如 WebClient 类型就使用的 EAP 模式进行设计。 // 下载数据的同步版本。 ...

C# 多线程学习笔记 - 2

本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段。 遵循原作者的 CC 3.0 协议。 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习。 原文章地址:https://blog.gkarch.com/threading/part2.html 一、同步概要 同步构造基本分为四种,简单的阻塞方法、锁构造、信号构造、非阻塞同步构造。 ...

C# 多线程学习笔记 - 1

CSharp 多线程学习笔记 基础知识 静态字段是在所有线程当中共享状态的。 一个线程被阻塞时,不会消耗 CPU 资源。 Join 可以等待另一个线程结束,Sleep 可以将线程阻塞指定的时间,两者使用时线程都是阻塞状态。 Join 可以设置超时时间,当线程执行超过指定时间返回 False。 Thread.Sleep(0) 会释放当前时间片,将 CPU 资源让出给其他线程。 Thread.Sleep( ...

《CLR Via C#》读书笔记:27.计算限制的异步操作

一、CLR 线程池基础 一般来说如果计算机的 CPU 利用率没有 100% ,那么说明很多进程的部分线程没有运行。可能在等待 文件/网络/数据库等设备读取或者写入数据,又可能是等待按键、鼠标移动等事件。 执行 I/O 限制的操作时,操作系统通过设备驱动程序通知硬件干活,而 CPU 处于一种空闲状态。而在现代应用程序当中,使用线程池来执行计算限制的操作,而不是手动创建线程。 每个 ...