diff --git a/src/syndicate/actors.nim b/src/syndicate/actors.nim index 683a4ca..a58a130 100644 --- a/src/syndicate/actors.nim +++ b/src/syndicate/actors.nim @@ -736,8 +736,24 @@ proc runPendingTurns* = terminateActor(turn, err) raise err +proc runOnce*: bool {.discardable.} = + ## Run pending turns if there are any, otherwise + ## poll for external events and run any resulting turns. + ## Return true if any turns have been processed. + if turnQueue.len == 0: + when defined(solo5): + discard solo5_dispatcher.runOnce() + else: + var ready: seq[Continuation] + ioqueue.poll(ready) + while ready.len > 0: + discard trampoline: + ready.pop() + result = turnQueue.len > 0 + runPendingTurns() + proc run* = - ## Run actors to completion + ## Run actors to completion. when defined(solo5): while turnQueue.len > 0 or solo5_dispatcher.runOnce(): runPendingTurns() diff --git a/syndicate.nimble b/syndicate.nimble index eae950e..d44fc7e 100644 --- a/syndicate.nimble +++ b/syndicate.nimble @@ -1,6 +1,6 @@ # Package -version = "20240422" +version = "20240424" author = "Emery Hemingway" description = "Syndicated actors for conversational concurrency" license = "Unlicense"