Tag: continuation

C#await vs continuations:不太一样?

在阅读了Eric Lippert的回答后,我得到的印象是await和call/cc几乎是同一枚硬币的两面,最多只有语法差异。 但是,在尝试在C#5中实际实现call/cc时,我遇到了一个问题:要么我误解了call / cc(这是相当可能的),要么等待只是让人联想到call / cc。 考虑像这样的伪代码: function main: foo(); print “Done” function foo: var result = call/cc(bar); print “Result: ” + result; function bar(continuation): print “Before” continuation(“stuff”); print “After” 如果我对call / cc的理解是正确的,那么应该打印: Before Result: stuff Done 至关重要的是,当调用continuation时,程序状态将与调用历史一起恢复,以便foo返回main并且永远不会返回bar 。 但是,如果在C#中使用await实现,则调用continuation 不会还原此调用历史记录。 foo返回bar ,并且没有办法(我可以看到) await可用于使正确的调用历史记录成为continuation的一部分。 请解释一下:我是否完全误解了call/cc的操作,或await与call/cc不完全相同? 现在我知道了答案,我不得不说有充分的理由认为它们非常相似。 考虑上面的程序在伪C#-5中的样子: function main: foo(); print “Done” async function […]