jak*_*kar 7 rakudo promise raku
以下简单的承诺是发誓的,我不允许打破它。
my $my_promise = start {
loop {} # or sleep x;
'promise response'
}
say 'status : ', $my_promise.status; # status : Planned
$my_promise.break('promise broke'); # Access denied to keep/break this Promise; already vowed
# in block <unit> at xxx line xxx
Run Code Online (Sandbox Code Playgroud)
这是为什么?
因为誓言是誓言,你不能改变它:只有真正拥有誓言的东西,才能打破承诺。这就是vow功能的意图。
你试图通过违背你所展示的承诺来实现什么?是要停止在start块内完成的工作吗?打破承诺不会那样做。并且vow明确添加了该机制以防止您认为它可以以某种方式停止start块内的工作。
如果您希望start块内的工作可中断,则需要添加某种定期检查的信号量,例如:
my int $running = 1;
my $my_promise = start {
while $running {
# do stuff
}
$running
}
# do other stuff
$running = 0;
await $my_promise;
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的。
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |