Вы, вероятно, могли бы использовать тип MailboxProcessor
или Agent
, чтобы приблизиться к тому, что вы хотите.Затем вы можете использовать agent.PostAndAsyncReply
с таймаутом для получения текущего AgentState
.Как упоминалось выше, вам нужно сделать объекты, которые вы передаете, сериализуемыми, но даже делегаты сериализуемы.Внутренние компоненты действительно не связаны с async
вычислениями.Вычисление async
просто позволит вам взаимодействовать с различными агентами в вашей программе неблокирующим образом.
Дейв Томас , и я работаю над библиотекой под названием fracture-io , который предоставит несколько готовых сценариев для работы с агентами.Мы еще не обсуждали этот точный сценарий, но мы могли бы, вероятно, взглянуть на то, как это сделать ... или взять коммит.:)
Я также заметил, что вы отметили свой вопрос callcc
.Я отправил образец этого оператора на fssnip , но Томас Петричек быстро опубликовал пример того, как легко сломать вычисления async
.Поэтому я не думаю, что callcc
является полезным решением для этого вопроса.Если вам не нужен async
, вы можете посмотреть в FSharpx для модуля Continuation
и оператора callcc
.