receive语句是否可能有多个超时子句,如果有,那么正确的语法是什么?
我想做点什么
foo(Timout1, Timeout2) ->
receive
after
Timeout1 ->
doSomething1();
Timeout2 ->
doSomething2()
end.
其中,取决于Timeout1
或Timeout2
中的哪个较小,调用doSomething1()
或doSomething2
。但是,上面的代码会导致语法错误。
如果我开始怀疑这是不可能的,那么以合适的Erlangy方式获得相同结果的最佳方法是什么?
提前致谢!
答案 0 :(得分:4)
foo(Timeout1, Timeout2) ->
{Timeout, ToDo} = if Timeout1 < Timeout2 -> {Timout1, fun doSomething1/0};
true -> {Timeout2, fun doSomething2/0} end,
receive
after Timeout -> ToDo()
end.
或
foo(Timeout1, Timeout2) when Timeout1 < Timeout2 ->
receive
after Timeout1 -> doSomething1()
end;
foo(_, Timeout2) ->
receive
after Timeout2 -> doSomething2()
end.
等
答案 1 :(得分:0)
您应该使用'gen_fsm'和'timer:send_after'的组合。