C#并发编程
文章平均质量分 68
本书全面讲解 C# 并发编程技术。全书分为几大部分:首先介绍几种并发编程技术,包括异步编程、并行编程、TPL 数据流、响应式编程;然后阐述一些重要的知识点,包括测试技巧、互操作、取消并发、函数式编程与 OOP、同步、调度;最后介绍了几个实用技巧。
repeatedly
凤凰台上凤凰游 凤去台空江自流
展开
-
《C#并发编程经典实例》学习笔记—3.1 数据的并行处理
问题 有一批数据,需要对每个元素进行相同的操作。该操作是计算密集型的,需要耗费一定的时间。 解决方案 常见的操作可以粗略分为 计算密集型操作 和 IO密集型操作。计算密集型操作主要是依赖于CPU计算,所以可以最大限度利用多核CPU的并行操作非常适合计算密集型操作。图像操作是比较常见的计算密集型操作,图像操作一般是借助矩阵存储图像数据,该书作者就举了矩阵旋转为例。 思路是借助Parallel.For...原创 2019-10-23 17:10:15 · 258 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.9 处理 async void 方法的异常
问题 需要处理从 async void 方法传递出来的异常。 解决方案 书中建议尽量不写 async void 这样的方法,如果非写不可,建议在方法内部 try catch 所有的代码,即在方法内部处理好所有可能的异常。 当然处理 async void 方法的异常,还有一个办法,即全局异常处理方法中进行异常处理,当然这个办法算不是办法的办法。全局异常处理可以处理 async void 方法的异常,...原创 2019-10-23 11:30:42 · 383 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.8 处理 async Task 方法的异常
异常处理一直是所有编程语言不可避免需要考虑的问题,C#的异步方法的异常处理和同步方法并无差别,同样要借助 try catch 语句捕获异常。 首先编写一个抛出异常的方法 static async Task ThrowExceptionAsync() { await Task.Delay(TimeSpan.FromSeconds(1)); throw new InvalidOpera...原创 2019-10-12 17:07:03 · 214 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.7 避免上下文延续
避免上下文延续 在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行。 为了避免在上下文中恢复运行,可让 await 调用 ConfigureAwait 方法的返回值,参数 continueOnCapturedContext 设为 false : async Task ResumeOnContextAsync () { await Task.Del...原创 2019-07-12 17:24:00 · 172 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.6 任务完成时的处理
问题 正在 await 一批任务,希望在每个任务完成时对它做一些处理。另外,希望在任务一完成就立即进行处理,而不需要等待其他任务。 问题的重点在于希望任务完成之后立即进行处理,而不去等待其他任务。 这里还沿用文中的例子。 等待几秒钟之后返回等待的秒数,之后立即打印任务等待的秒数。 等待的函数如下 static async Task<int> DelayAndReturnAsync(...原创 2019-04-02 11:29:38 · 351 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.5 等待任意一个任务完成 Task.WhenAny
问题 执行若干个任务,只需要对其中任意一个的完成进行响应。这主要用于:对一个操作进行多种独立的尝试,只要一个尝试完成,任务就算完成。例如,同时向多个 Web 服务询问股票价格,但是只关心第一个响应的。 文中举的是向多个Web服务询问股票价格的例子。 我曾在过往的工作中遇到另一个不太相似的例子。一个问答项目,在问题详情页面,重要的是问题展示和回答展示。在该页面有相关房型推荐和类似问题推荐等等多个...原创 2019-03-27 17:46:56 · 309 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.4 等待一组任务完成
问题 执行几个任务,等待它们全部完成。 使用场景 几个独立任务需要同时进行 UI界面加载多个模块,并发请求 解决方案 Task.WhenAll 传入若干任务,当所有任务完成时,返回一个完成的任务。 重载方法 Task WhenAll(IEnumerable<Task>) Task WhenAll(params Task[]) Task<TResult[]> WhenA...原创 2018-12-27 15:25:37 · 222 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.3 报告任务
问题 异步操作时,需要展示该操作的进度 解决方案 IProgress&amp;amp;lt;T&amp;amp;gt; Interface和Progress&amp;amp;lt;T&amp;amp;gt; Class 插一段话:读《C#并发编程经典实例》这本书偶有困惑,深感书中内容过于精炼,或许是作者故意为之,但显然对我这般知识浅薄的人来说,读起来这本书感到晦涩。偶然找到作者的个人博客,看到作者博客中对某一个知识点不同时间点上由浅至深的研究,原创 2018-12-19 11:15:35 · 161 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.2 返回完成的任务
问题: 如何实现一个具有异步签名的同步方法。 从异步接口或基类继承代码,但希望用同步方式实现方法。 解释一下所谓的异步接口和异步基类。例如如下代码 interface IMyAsyncInterface { Task<int> GetValueAsync(); } 即,接口和基类中包含了以Task为返回结果的方法,此接口或基类,即为异步接口或异步基类。 同步方式实现Tas...原创 2018-11-08 19:04:20 · 98 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—2.1 暂停一段时间
问题: 需要让程序(以异步方式)等待一段时间。 解决方案:Task类的静态函数Delay,返回Task对象 在github开源项目dotnet/coreclr,找到Task.cs有关Delay方法的源码 github地址: https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/src/Sy...原创 2018-08-30 20:29:39 · 439 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记—异步编程关键字 Async和Await
C# 5.0 推出async和await,最早是.NET Framework 4.5引入,可以在Visual Studio 2012使用。在此之前的异步编程实现难度较高,async使异步编程的实现变得简便。 各平台对async的支持情况 平台 async .NET 4.5及以上 ✓ .NET 4.0 NuGet Mono iOS/Droid ...原创 2018-08-24 14:03:03 · 264 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记-第一章并发编程概述
并发编程的术语 并发 同时做多件事情 多线程 并发的一种形式,它采用多个线程来执行程序。 多线程是并发的一种形式,但不是唯一的形式。 并行处理 把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。 并行处理是多线程的一种,而多线程是并发的一种。 异步编程 并发的一种形式,它采用future模式或回调(callback)机制,以避免产生不必要的线程。 一个 future(或...原创 2018-08-18 18:05:40 · 1016 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记-进程(process)和线程(thread)
本文主要参考自孙钟秀主编的《操作系统教程》一书中关于进程和线程的部分。 进程 为什么引入进程 一,刻画系统动态性,发挥系统并发性,提高资源利用率。 以C#为例,在编辑器Visual Studio Code写了几行代码,保存为cs文件。在未运行状态的下的代码,称之为静态的程序。静态的程序是一个相对的概念。当程序运行起来,它的运行依赖于处理器(CPU)和主存储器资源,我可以称之为动态的程序...原创 2018-08-04 19:00:40 · 923 阅读 · 0 评论 -
《C#并发编程经典实例》学习笔记-关于并发编程的几个误解
误解一:并发就是多线程 实际上多线程只是并发编程的一种形式,在C#中还有很多更实用、更方便的并发编程技术,包括异步编程、并行编程、TPL 数据流、响应式编程等。 误解二:只有大型服务器程序才需要考虑并发 服务器端的大型程序要响应大量客户端的数据请求,当然要充分考虑并发。但是桌面程序和手机、平板等移动端应用同样需要考虑并发编程,因为它们是直接面向最终用户的,而现在用户对使用体...原创 2018-07-29 22:11:23 · 302 阅读 · 0 评论