Loading

随笔分类 -  C#并发编程经典实例

摘要:问题 有一批数据,需要对每个元素进行相同的操作。该操作是计算密集型的,需要耗费一定的时间。 解决方案 常见的操作可以粗略分为 计算密集型操作 和 IO密集型操作。计算密集型操作主要是依赖于CPU计算,所以可以最大限度利用多核CPU的并行操作非常适合计算密集型操作。图像操作是比较常见的计算密集型操作, 阅读全文
posted @ 2019-10-23 17:13 repeatedly 阅读(810) 评论(2) 推荐(1)
摘要:问题 需要处理从 async void 方法传递出来的异常。 解决方案 书中建议尽量不写 async void 这样的方法,如果非写不可,建议在方法内部 try catch 所有的代码,即在方法内部处理好所有可能的异常。 当然处理 async void 方法的异常,还有一个办法,即全局异常处理方法中 阅读全文
posted @ 2019-10-23 11:32 repeatedly 阅读(555) 评论(0) 推荐(0)
摘要:异常处理一直是所有编程语言不可避免需要考虑的问题,C 的异步方法的异常处理和同步方法并无差别,同样要借助 try catch 语句捕获异常。 首先编写一个抛出异常的方法 常见的 try catch 处理语句。 async Task方法的异常存储在Task对象中,Task有一个Exception属性。 阅读全文
posted @ 2019-10-12 17:13 repeatedly 阅读(495) 评论(0) 推荐(0)
摘要:避免上下文延续 在默认情况下,一个 async 方法在被 await 调用后恢复运行时,会在原来的上下文中运行。 为了避免在上下文中恢复运行,可让 await 调用 ConfigureAwait 方法的返回值,参数 设为 false : 可能导致性能问题 作者Stephen提到,当在UI线程大量使用 阅读全文
posted @ 2019-07-12 17:30 repeatedly 阅读(594) 评论(0) 推荐(0)
摘要:问题 正在 await 一批任务,希望在每个任务完成时对它做一些处理。另外,希望在任务一完成就立即进行处理,而不需要等待其他任务。 问题的重点在于希望任务完成之后立即进行处理,而不去等待其他任务。 这里还沿用文中的例子。 等待几秒钟之后返回等待的秒数,之后立即打印任务等待的秒数。 等待的函数如下 以 阅读全文
posted @ 2019-04-02 12:27 repeatedly 阅读(981) 评论(0) 推荐(1)
摘要:问题 执行若干个任务,只需要对其中任意一个的完成进行响应。这主要用于:对一个操作进行多种独立的尝试,只要一个尝试完成,任务就算完成。例如,同时向多个 Web 服务询问股票价格,但是只关心第一个响应的。 文中举的是向多个Web服务询问股票价格的例子。 我曾在过往的工作中遇到另一个不太相似的例子。一个问 阅读全文
posted @ 2019-03-27 17:49 repeatedly 阅读(2358) 评论(3) 推荐(1)
摘要:问题 执行几个任务,等待它们全部完成。 使用场景 几个独立任务需要同时进行 UI界面加载多个模块,并发请求 解决方案 传入若干任务,当所有任务完成时,返回一个完成的任务。 重载方法 举例: 当任务返回结果类型相同,所有任务完成返回的是,存着每个任务执行结果的数组。 返回的数组中结果的顺序,并非可控, 阅读全文
posted @ 2018-12-27 15:31 repeatedly 阅读(372) 评论(0) 推荐(0)
摘要:问题 异步操作时,需要展示该操作的进度 解决方案 " " 和 " " 插一段话:读《C 并发编程经典实例》这本书偶有困惑,深感书中内容过于精炼,或许是作者故意为之,但显然对我这般知识浅薄的人来说,读起来这本书感到晦涩。偶然找到作者的个人博客,看到作者博客中对某一个知识点不同时间点上由浅至深的研究,十 阅读全文
posted @ 2018-12-19 11:17 repeatedly 阅读(560) 评论(0) 推荐(0)
摘要:问题: 如何实现一个具有异步签名的同步方法。 从异步接口或基类继承代码,但希望用同步方式实现方法。 解释一下所谓的异步接口和异步基类。例如如下代码 即,接口和基类中包含了以Task为返回结果的方法,此接口或基类,即为异步接口或异步基类。 同步方式实现Task方法 或者 阅读全文
posted @ 2018-11-08 19:09 repeatedly 阅读(778) 评论(0) 推荐(1)
摘要:问题: 需要让程序(以异步方式)等待一段时间。 解决方案:Task类的静态函数Delay,返回Task对象 在github开源项目 ,找到Task.cs有关Delay方法的源码 github地址: "https://github.com/dotnet/coreclr/blob/master/src/ 阅读全文
posted @ 2018-08-30 20:31 repeatedly 阅读(784) 评论(0) 推荐(0)
摘要:C 5.0 推出async和await,最早是.NET Framework 4.5引入,可以在Visual Studio 2012使用。在此之前的异步编程实现难度较高,async使异步编程的实现变得简便。 各平台对async的支持情况 |平台|async| | | | |.NET 4.5及以上|& 阅读全文
posted @ 2018-08-24 14:08 repeatedly 阅读(1710) 评论(3) 推荐(0)
摘要:并发编程的术语 并发 同时做多件事情 多线程 并发的一种形式,它采用多个线程来执行程序。 多线程是并发的一种形式,但不是唯一的形式。 并行处理 把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。 并行处理是多线程的一种,而多线程是并发的一种。 异步编程 并发的一种形式,它采用future模 阅读全文
posted @ 2018-08-18 18:07 repeatedly 阅读(1074) 评论(3) 推荐(0)
摘要:本文主要参考自孙钟秀主编的《操作系统教程》一书中关于进程和线程的部分。 进程 为什么引入进程? 一,刻画系统动态性,发挥系统并发性,提高资源利用率。 以C 为例,在编辑器Visual Studio Code写了几行代码,保存为cs文件。在未运行状态的下的代码,称之为静态的程序。静态的程序是一个相对的 阅读全文
posted @ 2018-08-04 19:06 repeatedly 阅读(1161) 评论(0) 推荐(0)
摘要:误解一:并发就是多线程 实际上多线程只是并发编程的一种形式,在C 中还有很多更实用、更方便的并发编程技术,包括异步编程、并行编程、TPL 数据流、响应式编程等。 误解二:只有大型服务器程序才需要考虑并发 服务器端的大型程序要响应大量客户端的数据请求,当然要充分考虑并发。但是桌面程序和手机、平板等移动 阅读全文
posted @ 2018-07-29 22:18 repeatedly 阅读(1049) 评论(1) 推荐(0)