【发布时间】:2019-06-18 06:15:09
【问题描述】:
我想更好地理解延续和协程。
我想在不使用seq 或async 工作流的情况下对它们进行编码。
我在F# 中找到了几个 Coroutines 的实现
this simple coroutines, and this from fsharpsnippets
我的问题是如何实现一个协程 yield 来为调用协程产生值,例如:
let anothercoroutine= coroutine {
do! yieldvalue' "hello"
do! yieldvalue' "world"
}
coroutine{
let! a = yield' anothercoroutine
let! b = yield' anothercoroutine
return a + " " + b
} // it would return "hello world"
这只是我想要完成的一个“hello world”示例,但我并不真的需要 anothercoroutine 成为序列生成器,尽管它可以是......这段代码将与其他已计划这样做的协程。
我想知道F# 是否有一些隐含的限制。
我试过了,但似乎比预期的要难,所以我需要知道我是否只是把时间花在一个不可能的问题上。
【问题讨论】:
-
我不确定我是否理解这个问题。您不需要那些 sn-ps 来执行异步工作流、创建序列生成器或在另一个序列生成器中使用序列。这些 sn-ps 是 computation expressions 的示例,asynchronous workflows 和 query expressions 是基于此
-
是的,我知道,我不需要序列生成器,我想要可以向其他 cooutie 发送值的协程,并且我特别想对其进行编码,因为我想了解所有的本质, .我会尝试重新制定。
-
@PanagiotisKanavos 关键是我希望能够编写具有特定
custom工作流程的代码,并且我想了解它是如何完成的。一些学习资源将不胜感激。我已经知道计算表达式加糖的单子句法,我了解几个单子,例如状态单子和延续单子……但是在协程中,文献不足
标签: f# coroutine continuations