Hi Thien, I probably should have mentioned I'm setting up an RPC protocol. I'm using throw/catch because there are lambdas setup inside that block (but outside the while t). Inside the lambda is the throw. I then store these lambdas in a global CONTINUATIONS var that the process filter looks up and calls if appropriate. The infloop breaks then. It's much harder (and much less efficient at first sight) to do it by polling CONDITION, but I may be missing something. Let me know if you want to look at a concrete example of the lambda strategy. BTW I learned this strategy reading SLIME, I just simplified it when lexical binding came along. It's been working there and in other projects for a long time. João On Thu, May 10, 2018 at 12:46 PM, Thien-Thi Nguyen wrote: > > () João Távora > () Wed, 09 May 2018 18:34:41 +0100 > > (while t..) spin is a common way to wait for async conditions > > Why not check the condition directly, i.e., s/t/CONDITION/ like: > > (while CONDITION > (accept-process-output ...)) > > That is more precise, no? Another idea, if there is some > expected traffic, is to use ‘(accept-process-output ...)’ > directly as (or as part of) CONDITION, using its return value. > > -- > Thien-Thi Nguyen ----------------------------------------------- > (defun responsep (query) > (pcase (context query) > (`(technical ,ml) (correctp ml)) > ...)) 748E A0E8 1CB8 A748 9BFA > --------------------------------------- 6CE4 6703 2224 4C80 7502 > > -- João Távora