I think you want handle-evt, eg:<div><br></div><div>(sync (handle-evt p1 (lambda (x) (list p1 x))) ....)</div><div><div><br></div><div>Robby</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Dec 13, 2012 at 4:27 PM, Ray Racine <span dir="ltr">&lt;<a href="mailto:ray.racine@gmail.com" target="_blank">ray.racine@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Using a Place or a Place-Channel as a sync event returns the value of a place-channel-get and not the Place itself.<div>
<br></div><div>Most events return the actual `thing&#39; which one sync&#39;d on.  This is not true with places and channels, one gets the message itself.<br>
<div><br></div><div>The conundrum is identification of which Place / Place-Channel actually fired.  Places themselves have no real mechanism supporting GUID labeling or even simple naming/labeling.   There is no (place-name my-place) or ability to assign an identifier upon creation.  There is documented support for Place and Place-Channel equality.  So one can work around all this at the app code level, i.e. implement their own labeling system for Places.</div>

<div><br></div><div>However assuming a roll your own labeling system there is still the anonymity of a place / place-channel when used as a sync event issue.</div><div><br></div><div>(let ((msg (sync pl-1 pl-2 pl-3))))</div>

<div>   ;; no idea from which place msg came from, unless explicitly recorded in the msg itself.</div><div>   ;; e.g. (Msg-sender msg) -&gt; my home brewed Place-GUID</div><div><br></div><div>Compare and contrast with ports used as an event.  A port used as a sync event results in the port itself upon which one can do whatever this knowledge.  For example, I might opt *not* to read the port as this time, even unilaterally close it without reading.</div>

<div><br></div><div>Consider the following parallel, asynchronous request/response idiom.</div><div><br></div><div>Given N request msgs and P places, issue one request message per ready place. (Ready in the sense it is not processing a request.)</div>

<div><br></div><div>I want something like</div><div><br></div><div>(let loop ((msgs ...))</div><div>  ...</div><div>  (let ((ready-place (sync p1 p2 p3))) </div><div>        (process-response (place-channel-get ready-place))</div>

<div>        (process-request ready-place (car msgs))</div><div>        (loop (cdr msgs))</div><div><br></div><div>How would one approach something like this given `sync&#39; not returning the ready place but the received msg from some anonymous place which was ready.</div>

<div><br></div><div><br></div><div><br></div><div>Thanks,</div><div><br></div><div>Ray</div><div><br></div><div><br></div><div>   </div><div><br></div><div><br></div></div>
<br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>