是否可以在信号块中调用用户定义的方法?
method my-method ( ... ) {
signal(SIGTERM,SIGINT,SIGQUIT,SIGHUP).tap( -> $sig {
say "Received signal: $sig";
self!restore-term();
exit;
} );
...
...
}
Run Code Online (Sandbox Code Playgroud)
是的,但有一些警告。
signal提供了Supply一系列事件,您可以tap(如果愿意)但可能应该在react whenever结构内部使用。
在您的示例中,tap需要一个Block(lambda)。每次调用该方法时,它都会设置另一个Supply(这可能不是您想要的)。
每当事件到达时都会调用此块。这意味着它是完全异步的并且没有上下文,除了创建块的词法上下文。
因此,无论何时有信号到达Supply,它都会self在调用方法的那一刻运行块。哪些可能不是您所期望的?
所以我觉得你问错了问题。显然,您有一个对象(希望是哨兵),您希望restore-term在有人表示他们想要离开程序时调用该方法。因此,您最好将程序重组为以下内容:
my $sentinel = class.new(...);
react {
whenever signal(SIGTERM,SIGINT,SIGQUIT,SIGHUP) -> $sig {
say "Received signal: $sig";
$sentinel.restore-term();
exit;
}
# .... other stuff
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |