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;。