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

Jes*_*ter 6 .net c# 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
    }
Run Code Online (Sandbox Code Playgroud)

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

我也知道这个"阻塞"是在没有真正阻塞线程的情况下完成的.

async/await在C#中查看新模式时,完全相同的事情适用于此.当我在await异步方法中使用关键字时,该方法的执行可以在该行"阻塞",并且只允许方法调用"唤醒"并在基础等待任务完成时稍后完成工作.

我想要的是一个关于F#/ C#如何设法"无阻塞地等待"的"执行摘要".