Haskell语言学习笔记(85)Async
安装 async
$ cabal install async
async-2.2.1 installed
async / wait / concurrently
- async :: IO a -> IO (Async a)
启动新线程,执行异步操作。 - wait :: Async a -> IO a
等待异步操作完成,并返回值。 - concurrently :: IO a -> IO b -> IO (a, b)
并发(concurrently)运行两个 IO 操作,返回两个结果。
示例
安装 http-conduit
$ cabal install http-conduit
Installed http-conduit-2.3.2
Sample code to accompany the book "Parallel and Concurrent Programming in Haskell"
module GetURL (getURL) where
import Network.HTTP.Conduit
import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy as L
getURL :: String -> IO ByteString
getURL url = L.toStrict <$> simpleHttp url
一个下载模块 getURL
import GetURL
import Control.Concurrent.Async
import qualified Data.ByteString as B
main = do
a1 <- async (getURL "http://www.wikipedia.org/wiki/Shovel")
a2 <- async (getURL "http://www.wikipedia.org/wiki/Spade")
r1 <- wait a1
r2 <- wait a2
print (B.length r1, B.length r2) -- (87653,58155)
- 使用 async 开启两个线程同时下载两个网页。
- 使用 await 等待下载结束并得到结果。
import GetURL
import Control.Concurrent.Async
import qualified Data.ByteString as B
main = do
(r1, r2) <- concurrently
(getURL "http://www.wikipedia.org/wiki/Shovel")
(getURL "http://www.wikipedia.org/wiki/Spade")
print (B.length r1, B.length r2) -- (87653,58155)
- 使用 concurrently 开启两个线程同时下载两个网页。下载结束时返回结果。
Haskell语言学习笔记(85)Async的更多相关文章
- Haskell语言学习笔记(88)语言扩展(1)
ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...
- Haskell语言学习笔记(79)lambda演算
lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...
- Haskell语言学习笔记(69)Yesod
Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...
- Haskell语言学习笔记(20)IORef, STRef
IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...
- Haskell语言学习笔记(39)Category
Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...
- Haskell语言学习笔记(72)Free Monad
安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...
- Haskell语言学习笔记(49)ByteString Text
Data.ByteString String 是 [Char] 的同义词,在使用上存在List的惰性所带来的性能问题. 在处理大型二进制文件时,可以使用 ByteString 来代替 String. ...
- Haskell语言学习笔记(44)Lens(2)
自定义 Lens 和 Isos -- Some of the examples in this chapter require a few GHC extensions: -- TemplateHas ...
- Haskell语言学习笔记(38)Lens(1)
Lens Lens是一个接近语言级别的库,使用它可以方便的读取,设置,修改一个大的数据结构中某一部分的值. view, over, set Prelude> :m +Control.Lens P ...
随机推荐
- String,StringBuilder和StringBuffer区别
String字符串常量 StringBuilder 字符串变量(非线程安全) StringBuffer 字符串变量(线程安全) 1.String String是字符串常量,为不可改变对象 Strin ...
- idea vs
F8对应vs的F10F7对应vs的F11F9对应vs的F5 ctrl+.对应vs的alt+回车 shift+alt+s 查找文本的出现位置就用Ctrl+F/Ctrl+Shift+F在当前窗口或 ...
- 开关Windows休眠功能
在windows休眠的时候会把内存里的数据缓存到硬盘的C:/Hiberfil.sys文件,万一断电能够从中恢复状态,然而这对SSD硬盘损耗很大,如果没必要还是关了吧: 关闭: powercfg -h ...
- 微信小程序学习笔记1--小程序的代码构成
最近打算学习一下微信小程序,看了微信公众平台的文档感觉还比较简单,就从这个方向重新找回学习的状态吧: 1.先了解一下小程序的代码构成: 创建项目后会看到四种后缀的文件: .json 后缀的 JSON ...
- virsh详解
来个表情包表达我此时的心情 man virsh virsh [options]... [<command_string>] virsh [options]... <command&g ...
- C#常用类操作
C#提供了许多可以直接使用的类代码. 1. Convert类 Convert类提供了很多静态方法成员,用于实现数据类型的转换. Convert类的常用方法 ...
- 2014年第五届蓝桥杯JavaB组省赛试题解析
题目及解析如下: 题目大致介绍: 第一题到第三题以及第六题是结果填空,方法不限只要得到最后结果就行 第四题和第五题是代码填空题,主要考察算法基本功和编程基本功 第七题到第十题是编程题,要求编程解决问题 ...
- Vuejs自定义全局组件--loading
不管是使用框架,还是不使用任何的框架,我们都不可避免的需要与“加载中……”打交道,刚刚学习了Vuejs自定义组件的写法,就现学现卖,介绍一下吧! 先看一下目录结构,一般情况下,每一个组件都新建一个新的 ...
- js数据类型转换 ----流程控制
数据类型转换: //number转换成str // var str=a+''; // console.log(str); // console.log(typeof str); //转换成字符串了 v ...
- Cannot run Eclipse; JVM terminated. Exit code=13
在myeclipse 上运行好好的, 在 eclipse 上就运行不了了. 运行eclipse.exe 就出现: Cannot run Eclipse; JVM terminated. Exit co ...