Předpokládejme dva aktory A a B.
A -> B: kolik je hodin
B -> A: 19:41
A -> B: supr, díky
B -> A: není zač
IMHO je čisté řešení rozšířit zprávy OK na několik zpráv s tím, že některé zprávy budou terminální (konečné) a při jejich obdržení se ukončí komunikační transakce. Pokud jde o nějaký systém pro výpočty, pak budou aktoři asi nějací workeři. Ti workeři se budou nalézat v různých stavech a zprávy budou emitované při změně jejich stavu. Na odběr zprávy se budou moci registrovat další workeři, zajišťující třeba navazující výpočty. Pak si lze nakreslit všechny stavy, které může výpočet mít (všechny výpočty mohou mít buď totožnou množinu stavů anebo se množina stavů může odlišova podle prováděného výpočtu). Pokud jsou známy všechny stavy, lze si znázornit povolené přechody mezi těmi stavy a z toho lze pak vidět, kde vzniká cyklus a zda ten cyklus je žádoucí. Pokud žádoucí není, napojí se do cyklu exit vedoucí na nějaký terminální stav - například při dosažení nějakého čítače, nebo při překročení časového timeoutu apod.
V případě že jde o komunikaci jen dvou aktorů, je situace podobná. Pokud je vyžadováno potvrzení, jde o transakční chování a to opět znamená držet stav a vyřešit všechny možné okrajové situace (latence při přenosu zpráv, zprávy přijdou v opačném pořadí, zpráva přijde poškozená, duplicitně nebo vůbec, dojde pamět k držení stavu, je nutno řešit životnost stavu, ... atd).
Vždy je dobré se inspirovat v reálném světě - jak si zprávy předávají lidé s jednosměrnou vysílačkou? Používají konvenční signalizaci pomocí slov jako: přepínám... opakuji... rozumím... konec. Taky se lze podívat na síťové komunikační protokoly s handshakem, s retransmisí... Nebo se podívat na oběh dokumentů na úřadě - jsou tam také lhůty pro reakci, je určeno kdo to má všechno a v jakém pořadí schválit a orazítkovat, je tam lhůta na promlčení atd. - dokonce tam může dojít i k tomu zacyklení :-D
Zpátky k jednoduchému případu hodin. Místo OK - OK bude víc potvrzovacích zpráv rozlišujících, kdo co potvrzuje. Tím cyklus zmizí - vznikl pouze nedostatečným rozlišením zpráv. Například:
A->B: kolik je hodin?
B->A: je 10.30h
A->B: potvrzuji přijetí času 10.30h
B->A: díky za potvrzení, transakce dokončena
Pokud A nepotvrdí přijetí, může B poslat odpověď znova:
...
B->A: opakuji, je 10.30h
A->B: potvrzuji přijetí času 10.30h
B->A: díky za potvrzení, transakce dokončena
Nemá smysl, aby A ještě dál potvrzoval, že dostal od B potvrzení o tom, že A obdržel čas, na který se Bčka ptal.
U distribuovaných transakcí to může být složitější, tam může několik uzlů potvrzovat různé skutečnosti a teprv při splnění všech požadovaných podmínek dojde k uplatnění výsledné akce. Pokud budete mí ale výpočetní grid a budou mezi výpočty závislosti, budete to asi také řešit.