gpt4 book ai didi

events - 异步和事件

转载 作者:行者123 更新时间:2023-12-02 06:29:41 24 4
gpt4 key购买 nike

我有一个函数可以异步执行一些操作,但不会公开异步,而是会在完成时调用带有结果的回调。我想将其变成异步,并提出了这段代码,但似乎不太正确。有更好的方法吗?

async { 
let ev = Event<_>()
someAsyncExternalCodeThatWillCallTheCallbackWhenDone(fun value -> ev.Trigger value)
let! value = Async.AwaitEvent(ev.Publish)
return value
}

在这种情况下使用 Observable 或 ManualResetEvent 而不是 Event 有什么优势吗?

最佳答案

我认为这种情况下惯用的解决方案是使用Async.FromContinuations:

Async.FromContinuations(fun (cont, econt, ccont) ->
someAsyncExternalCodeThatWillCallTheCallbackWhenDone(cont))

FromContinuations 函数还可以让您处理异常(如果发生异常,则调用 econt)或取消(您可以将其视为基本 创建异步计算的方法)。

也就是说,我不认为使用事件有什么问题。带有事件的代码实现了几乎相同的逻辑(我认为),但以更复杂的方式。

关于events - 异步和事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15550614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com