F#是否有类似于OCaml的Async库的等效物?具体而言,是否有轻松创建Deferred值并在它们填充时执行函数的能力?
特别是,我想等待特定引用的更改,然后执行某些操作。在OCaml中,我会通过创建一个ivar并调用其读取函数来实现此目的;在F#中我该如何做呢?
F#是否有类似于OCaml的Async库的等效物?具体而言,是否有轻松创建Deferred值并在它们填充时执行函数的能力?
特别是,我想等待特定引用的更改,然后执行某些操作。在OCaml中,我会通过创建一个ivar并调用其读取函数来实现此目的;在F#中我该如何做呢?
是的,我的Hopac库与Jane Street的Async库和F#的异步工作流等许多库有着密切关系。 Hopac基于Concurrent ML(CML),可以说(从技术术语而非观点的角度)目前提供比它们更具表现力的编程模型。
CML和Hopac的同步通道支持简单会合,这意味着通信双方都同意何时进行通信。这反过来又有一些有趣的应用,比如实现多播通道,支持可垃圾回收的发布-订阅式通信,无需显式取消订阅(与Rx IObservable-IObserver相比)。
这是一个 F# 交互会话,首先定义了一个 IVar,然后启动了一个并发作业来读取 IVar 的值并打印一条消息。最后将 IVar 写入一个值:
> let nameVar : IVar<string> = ivar () ;;
val nameVar : IVar<string>
> start (nameVar |>> fun who -> printfn "Hello, %s!" who) ;;
val it : unit = ()
> run (nameVar <-= "Vesa") ;;
val it : unit = ()
> Hello, Vesa!
async
等功能,还有MailboxProcessor
等更多功能。Task
。
lazy
关键字)。 - ildjarnTask<T>
гҖӮеҸҰиҜ·еҸӮйҳ…Async.AwaitTask
гҖҒAsync.StartAsTask
е’ҢAsync.StartChildAsTask
гҖӮ - ildjarn