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); } }
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)); } }