现在,执行这个方法两次,见清单 2:
清单 2. 执行 loop 方法
irb(main):007:0> cont = loop 5
Value of i: 1
Value of i: 2
Value of i: 3
Value of i: 4
Value of i: 5
=> #<Continuation:0x2b5a358>
irb(main):008:0> cont.call
Value of i: 6
Value of i: 7
Value of i: 8
Value of i: 9
Value of i: 10
=> 1 10
irb(main):009:0> cont = loop 8
Value of i: 1
Value of i: 2
Value of i: 3
Value of i: 4
Value of i: 5
Value of i: 6
Value of i: 7
Value of i: 8
=> #<Continuation:0x2b562f0>
irb(main):010:0> cont.call
Value of i: 9
Value of i: 10
每次执行调用时,延续会获得执行的状态。所以,使用延续的 Web 开发框架可以在处理每个请求之后捕获一个延续,并用一个标识符将它存储在会话中。然后,框架可以在处理每个新请求之前从会话中恢复延续,采用的方法与存储用户数据一样。
优点和缺点
延续服务器方式在许多方面都很出色 —— 有状态的编程模型和具有无状态性能的用户体验。这种方式的优点如下:
它确保了请求之间的无状态。框架可以识别一个 URL 中的各个延续并将延续存储在会话中。
它提供了一个有状态编程模型。框架可以在任何时候恢复任何延续。如果用户第二次提交一个表单,延续可以恢复以前某个时间点上的状态。
可以根据业务规则让延续失效,这样就很容易防止两次提交表单。
解决了 Back 按钮的问题。因为可以直接获得任意时间点上的执行状态,如果用户点击了 Back 按钮,框架只需恢复适当的延续。
文章来源于领测软件测试网 https://www.ltesting.net/