不管是使用yield或借助第三方类库来简化异步编程,或多或少总是感觉不那么正统,有点hack的感觉。这种感觉在实验阶段倒还可以,要是用在产品中总有点担心,即使这些类库来自权威的第三方,我不知道大家有没有跟我同样的感觉。那么这个时候我们就会想,如果在语言中直接能提供这种机制该多好呢。
F#的异步工作流
在Visual Studio 2010中,新包含了一种语言:F#。F#的一大特性就是异步计算。能让你用同步的方式编写异步的代码,不用使用AsyncCallback回调将一个方法分为两段,也不用注册异步完成事件。
F#是一个强类型的函数式编程语言,现在是2.0版本,在VS2010中正式作上海企业网站设计与制作为first-class语言出现。其主要设计者是Don Syme,同是.NET中的泛型的主要设计者之一。
我们来看看前面几篇文章中都包含的那个示例使用F#的代码将是怎样:
let asyncDownload (url:
string
)
=
async{
let req = WebRequest.Create(url)
let ! resp = req.AsyncGetResponse()
use stream
= resp.GetResponseStream()
let reader = new StreamReader(stream)
return reader.ReadToEnd()
}
async{
let req = WebRequest.Create(url)
let ! resp = req.AsyncGetResponse()
use stream
= resp.GetResponseStream()
let reader = new StreamReader(stream)
return reader.ReadToEnd()
}
很短小精悍吧(实际上这段代码可以更短,但为了说明异步的编写方式,我没有使用那些看起来有点怪的语法)。下面我们来解读一下这段代码,希望本文结束后你能对F#中的异步有点初步的印象。
F#中用let定义一个值,比如:
上海网站建设div class="cnblogs_code">
let value
=
5