상속: ISchedulable, IDisposable
예제 #1
0
파일: Util.cs 프로젝트: jli94/Fracture
        public void Dispose()
        {
            if (OnEarlyDispose != null)
            {
                OnEarlyDispose();
                OnEarlyDispose = null;
            }

            if (_Task != null)
            {
                _Task.Dispose();
            }

            if (_SequenceFuture != null)
            {
                if (!_SequenceFuture.Completed)
                {
                    _SequenceFuture.Dispose();
                }
            }

            if (_Thunk != null)
            {
                _Thunk.Dispose();
                _Thunk = null;
            }

            _Task      = null;
            _Scheduler = null;
        }
예제 #2
0
파일: Util.cs 프로젝트: jli94/Fracture
        public WaitForAll(params object[] objects)
        {
            ISchedulable         s;
            IFuture              f;
            IEnumerator <object> t;

            _Schedulables = new ISchedulable[objects.Length];
            _Futures      = new IFuture[objects.Length];

            for (int i = 0; i < objects.Length; i++)
            {
                if ((s = objects[i] as ISchedulable) != null)
                {
                    _Schedulables[i] = s;
                }
                else if ((f = objects[i] as IFuture) != null)
                {
                    _Futures[i] = f;
                }
                else if ((t = objects[i] as IEnumerator <object>) != null)
                {
                    _Schedulables[i] = new SchedulableGeneratorThunk(t);
                }
                else
                {
                    throw new ArgumentException("WaitForAll arguments must be ISchedulable, IFuture or IEnumerator<object>", "objects");
                }
            }
        }
예제 #3
0
파일: Util.cs 프로젝트: jli94/Fracture
 public StoreResult(
     IEnumerator <object> task, Expression <Func <T> > target,
     TaskExecutionPolicy executionPolicy = TaskExecutionPolicy.RunWhileFutureLives
     )
 {
     _Task            = task;
     _Thunk           = new SchedulableGeneratorThunk(_Task);
     _ExecutionPolicy = executionPolicy;
     _Future          = Future.New <T>();
     _Future.Bind(target);
     _Future.RegisterOnComplete(Completed);
 }
예제 #4
0
파일: Util.cs 프로젝트: jli94/Fracture
        protected void Start()
        {
            _Thunk             = new SchedulableGeneratorThunk(_Task);
            _Thunk.OnNextValue = OnNextValue;

            _SequenceFuture = _Scheduler.Start(_Thunk, TaskExecutionPolicy.RunWhileFutureLives);
            _SequenceFuture.RegisterOnDispose((f) => {
                Resume();
                Dispose();
            });
            _SequenceFuture.RegisterOnComplete((f) => {
                if (f.Failed)
                {
                    Fail(f.Error);
                }
                else
                {
                    Resume();
                }
            });
        }