예제 #1
0
파일: Async.cs 프로젝트: wallymathieu/Hopac
        internal override void DoJob(ref Worker wr, Cont <X> xK)
        {
#if !NO_ISTHREADPOOLTHREAD
            if (Thread.CurrentThread.IsThreadPoolThread)
            {
                var work = wr.WorkStack;
                wr.WorkStack = null;
                Scheduler.PushAll(wr.Scheduler, work);
                Cont.Do(xK, ref wr, this.Run());
            }
            else
#endif
            {
                var fac = new FromAsyncCont <X>(xK);
                this.Start(fac);
                if (0 != fac.state)
                {
                    goto Continue;
                }
                fac.sr = wr.Scheduler;
                if (0 == Interlocked.CompareExchange(ref fac.state, 1, 0))
                {
                    return;
                }
Continue:
                Work.Do(fac.xK, ref wr);
            }
        }
예제 #2
0
파일: Async.cs 프로젝트: wallymathieu/Hopac
        internal override void DoJob(ref Worker wr, Cont <X> xK)
        {
            var fac = new FromAsyncCont <X>(xK);

            this.Start(fac);
            if (0 != fac.state)
            {
                goto Continue;
            }
            fac.sr = wr.Scheduler;
            if (0 == Interlocked.CompareExchange(ref fac.state, 1, 0))
            {
                return;
            }
Continue:
            Work.Do(fac.xK, ref wr);
        }
예제 #3
0
파일: Async.cs 프로젝트: wallymathieu/Hopac
 ///
 public abstract void Start(FromAsyncCont <X> xK);