【发布时间】:2011-10-13 22:50:40
【问题描述】:
我想要一个可序列化的延续,这样我就可以在等待新事件的同时将异步工作流腌制到磁盘。当异步工作流在 let! 上等待时,它将与唤醒它所需的记录一起保存。而不是任意的内存中IAsyncResults(或Task<T>等),例如,它必须是传入消息的过滤标准以及延续本身。如果没有对延续的语言支持,这可能是一项壮举。但是使用计算表达式来处理显式 CPS 转换,它可能不会太棘手,甚至可能更有效。有没有人解决过这样的方法?
【问题讨论】:
-
你能提供一个例子来描述你在寻找什么吗?
-
async { let! x = GetSimulationStartTime(); let! y = GetSimulationStopTime(); return! y-x }怎么样,开始和停止可能相隔几天,我不想显式建模状态机type AgentState = WaitingForStart | WaitingForEnd | Completed -
AFAIK 甚至没有现成的选项来序列化 Qutoations/Expressions - 对于延续的一般情况(您可能会在闭包中捕获很多内容),您无法获得此选项.想想看——无论如何你都需要一种序列化每个对象的方法。如果您真的需要它,可以自己实现它(您可以使用将 ISerializable 等待状态保存到磁盘的选项自己重写异步工作流) - 或者像其他答案中提到的那样真正查看 WF。
标签: c# f# android-asynctask continuations