I G*_*ERS 10
不,它没有,但您要求的内容很容易实现:
ask(Pid, M) ->
Promise = erlang:monitor(process, Pid),
Pid ! {ask, Promise, M},
Promise.
Run Code Online (Sandbox Code Playgroud)
等待承诺的结果现在可以通过以下方式完成:
force(Promise, Timeout) ->
receive
{result, Promise, R} ->
erlang:demonitor(Promise, [flush]),
{ok, R};
{'DOWN', Promise, process, _, Reason} ->
{error, {callee_died, Reason}}
after Timeout -> {error, timeout}
end.
Run Code Online (Sandbox Code Playgroud)
如果你不想在询问和强制之间做任何事情,那么你可以使用OTP行为gen_server,它实际上一次gen_server:call/3实现了这两个功能.
注意在上面我们如何请求目标上的监视器引用,Pid它允许我们监视它是否死亡.我们还使用此引用作为promise的唯一标记,以便我们可以在邮箱中看起来像它的其他消息中找到它.
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |