来自代理/邮箱处理器的通用回复?

时间:2015-04-21 20:38:33

标签: asynchronous f# agent

我目前有一个代理人通过不断向自己发布“工作”消息来执行繁重的数据处理。

有时,此代理的客户希望中断此处理以安全方式访问数据。

为此,我认为向代理发布异步,代理可以在安全状态下运行,这样会很好。这很好用,消息看起来像这样:

type Message = |Sync of Async<unit>*AsyncReplyChannel<unit> 

代理处理简单地变成:

match mailbox.Receive () with
| Sync (async, reply) -> async |> Async.RunSynchronously |> reply.Reply

只要客户端不需要从异步中返回一些值,因为我将async / reply限制为单元类型,并且我不能在区分联合中使用泛型类型。

我解决这个问题的最佳尝试涉及包装异步和等待处理,但这看起来很混乱,并不像我对F#所期望的那样优雅。我也是F#中异步工作流程的新手,因此我很可能在这里错过/误解了一些概念。

所以问题是;如何在代理响应中返回泛型类型?

0 个答案:

没有答案