11赞
592
当前位置:  开发笔记 > 编程语言 > 正文

F#在另一个线程上运行阻塞调用,在异步工作流中使用

如何解决《F#在另一个线程上运行阻塞调用,在异步工作流中使用》经验,为你挑选了1个好方法。



1> scrwtp..:

我觉得你有点迷路了。Async.StartAsTask其次是Async.AwaitTask有效地相互抵消,其副作用Task是在进程中创建的实际上触发blockingFoo了线程池中包含的异步块的评估。因此,它起作用了,但是却超出了期望。

如果asyncFoo要从另一个异步块中触发对它的评估,则更自然的方法是在Async.Start不想等待完成时使用它,或者Async.StartChild如果您愿意,则使用它。

let asyncFoo = 
    async {
        blockingFoo() |> ignore
    }

async {
    // "fire and forget"
    asyncFoo |> Async.Start

    // trigger the computation
    let! comp = Async.StartChild asyncFoo

    // do other work here while comp is executing

    // await the results of comp
    do! comp
}


推荐阅读
author-avatar
enochsun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有