예제 #1
0
            internal override void TryAlt(ref Worker wr, int i, Cont <X> xK, Else xE)
            {
                var nk = Pick.ClaimAndAddNack(xE.pk, i);

                if (null != nk)
                {
                    var handler = new WithNackCont <X, xA>(xK, xE);
                    wr.Handler = handler;
                    Do(nk).DoJob(ref wr, handler);
                }
            }
예제 #2
0
            internal override void TryAlt(ref Worker wr, int i, Cont <X> xK, Else xE)
            {
                var pk = xE.pk;
                var nk = Pick.ClaimAndAddNack(pk, i);

                if (null != nk)
                {
                    Alt <X> xA;
                    try {
                        xA = Do(nk);
                        Pick.Unclaim(pk);
                    } catch (Exception e) {
                        Pick.PickClaimedAndSetNacks(ref wr, i, pk);
                        xA = new AltFail <X>(e);
                    }
                    xA.TryAlt(ref wr, i, xK, new WithNackElse(nk, xE));
                }
            }