Considérons le code Erlang suivant:Comment faire pour que les TChan de Haskell diffèrent les messages comme les files d'attente de messages d'Erlang?
-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").
La sortie est la suivante:
Root finished
One
Two
Final
Spawn finished
Le traitement du message final
est essentiellement différée jusqu'à ce que le dernier bloc de réception, en vertu des recevoir des modèles précédents ne correspond que message.
Comment faites-vous cela avec TChan de Haskell?
D'accord. Ces sémantiques n'existent pas dans les paquets de base 'Chan' ou' TChan' - vous devrez implémenter vous-même une file d'attente différée. –