安装 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的更多相关文章

  1. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  2. Haskell语言学习笔记(79)lambda演算

    lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...

  3. Haskell语言学习笔记(69)Yesod

    Yesod Yesod 是一个使用 Haskell 语言的 Web 框架. 安装 Yesod 首先更新 Haskell Platform 到最新版 (Yesod 依赖的库非常多,版本不一致的话很容易安 ...

  4. Haskell语言学习笔记(20)IORef, STRef

    IORef 一个在IO monad中使用变量的类型. 函数 参数 功能 newIORef 值 新建带初值的引用 readIORef 引用 读取引用的值 writeIORef 引用和值 设置引用的值 m ...

  5. Haskell语言学习笔记(39)Category

    Category class Category cat where id :: cat a a (.) :: cat b c -> cat a b -> cat a c instance ...

  6. Haskell语言学习笔记(72)Free Monad

    安装 free 包 $ cabal install free Installed free-5.0.2 Free Monad data Free f a = Pure a | Free (f (Fre ...

  7. Haskell语言学习笔记(49)ByteString Text

    Data.ByteString String 是 [Char] 的同义词,在使用上存在List的惰性所带来的性能问题. 在处理大型二进制文件时,可以使用 ByteString 来代替 String. ...

  8. Haskell语言学习笔记(44)Lens(2)

    自定义 Lens 和 Isos -- Some of the examples in this chapter require a few GHC extensions: -- TemplateHas ...

  9. Haskell语言学习笔记(38)Lens(1)

    Lens Lens是一个接近语言级别的库,使用它可以方便的读取,设置,修改一个大的数据结构中某一部分的值. view, over, set Prelude> :m +Control.Lens P ...

随机推荐

  1. Mysql 之多实例 安装以及配置

    MySQL多实例 1.什么是MySQL多实例 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306.3307),同时运行多个Mysql服务进程,这些服务进程通过不同的soc ...

  2. mac gcc develop

    1:check version gcc -v   /   g++ -v 2:compile gcc *.c   / g++ *.cpp outfile: a.out 3:excute ./a.out ...

  3. Javascript的闭包及其使用技巧实例

    Javascript的闭包及其使用技巧实例 一.闭包的基本概念 闭包(Closure)是一个引用了自由变量的函数,记录了该函数在定义时的scope chain.又称词法闭包(Lexical Closu ...

  4. 再谈编码 decode和encode

    1. ascii. 有: 数字, 字母, 特殊字符. 8bit 1byte 128 最前面是0 2. gbk. 包含: ascii, 中文(主要), 日文, 韩文, 繁体文字. 16bit, 2byt ...

  5. Nginx的安装(CentOS 7环境)

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装安装 nginx 需要先 ...

  6. django-BaseCommand自带的权限分组

    note:  应该是这样的结构,并且commands名字是固定的. 执行: python manage.py  initgroup initgroup.py # -*- coding: utf-8 - ...

  7. 使用NetBox实现ASP网页封装为EXE教程

    简单的形容就是把ASP文件打包 成一个EXE文件,并且不需要在调试的机器上安装IIS即可正常调试.如果按照说明书来操作的话,观看比较繁琐,本人为方便大家使用,现制作一个简单的使用教程. 封装过程 1. ...

  8. ORACLE ROWNUM解析[转]

    一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.< ...

  9. uva-10887-枚举

    题意:集合S1和S2,把S2中的元素拼接到S1的后面去,生成新的元素,问有多少个不重复的元素 直接map.注意,不能用cin读取字符串,题目没有保证字符串中间没有空格 #include "p ...

  10. sql server无log ldf日志文件附件mdf数据库重新生成ldf日志文件

    CREATE DATABASE TestDB    ON    (    FILENAME ='D:\TestDB.mdf' --路径     ) for ATTACH_REBUILD_LOG