F#async或C#async / await如何真正起作用

时间:2014-04-16 19:02:11

标签: c# .net f# async-await

F#' async或C#的async/await关键字如何实际运作?

让我们以MailboxProcessor为例:

type Agent<'T> = MailboxProcessor<'T>
let agent = Agent.Start(fun inbox ->
    let rec loop() = async {
        let! msg = inbox.Receive()
        // do something with each message as it arrives
    }

根据我对F#异步模式的理解,我知道let!关键字将阻止此行中异步工作流内的代码执行,直到项目在收件箱中可用。

我也意识到这个&#34;阻止&#34;在没有真正阻塞线程的情况下完成。

在C#中查看新的async/await模式时,完全相同的事情适用。当我在异步方法中使用await关键字时,方法的执行是免费的&#34;阻止&#34;在该线路上,只需将方法呼叫留给&#34;唤醒&#34;当底层等待的任务完成时,稍后完成工作。

我想要的是一份执行摘要&#39; F#/ C#如何管理等待而不阻止&#39;。

0 个答案:

没有答案