xem xét mã Erlang sau:Làm thế nào để làm cho các thông điệp trì hoãn TChan của Haskell như hàng đợi thông điệp của Erlang có thể?
-module(testit).
-export([testit/0]).
testit() ->
Pid = spawn(fun testit_proc/0),
Pid ! final,
Pid ! one,
Pid ! two,
io:format("Root finished~n").
testit_proc() ->
receive
one -> io:format("One~n");
two -> io:format("Two~n")
end,
receive
one -> io:format("One~n");
two -> io:format("Two~n")
end,
receive
one -> io:format("One~n");
two -> io:format("Two~n");
final -> io:format("Final~n")
end,
io:format("Spawn finished~n").
Đầu ra là:
Root finished
One
Two
Final
Spawn finished
Việc xử lý của thông điệp final
được về cơ bản hoãn lại cho đến người cuối cùng nhận được khối nhờ các nhận mô hình trước đó không phù hợp mà thông điệp.
Bạn làm điều này với TChan của Haskell như thế nào?
Đồng ý. Các ngữ nghĩa này không tồn tại trong các gói 'Chan' hay' TChan' cơ bản - bạn sẽ phải tự mình thực hiện một hàng đợi trì hoãn. –