示例#1
0
 public Task <int> Start()
 {
     _self = this;
     _asyncBuiler.Start(ref _self);
     return(_asyncBuiler.Task);
 }
示例#2
0
            public void MoveNext()
            {
                switch (_state)
                {
                case 0:
                {
                    _state = 1;

                    sum   = 1_000;
                    delta = 3_000;
                    delay = sum;
                    Console.WriteLine("00000000000000000000000");
                    Console.WriteLine($"{nameof(delay)}={delay}, {nameof(sum)}={sum}");
                    sum     += delta;
                    _awaiter = MyDelayReturn(sum).GetAwaiter();
                    if (_awaiter.IsCompleted)
                    {
                        goto case 1;
                    }
                    else
                    {
                        MySleep(3600, 1000);
                        _self = this;
                        _asyncBuiler.AwaitUnsafeOnCompleted(ref _awaiter, ref _self);
                    }
                }
                break;

                case 1:
                {
                    _state = 2;

                    delay = _awaiter.GetResult();
                    Console.WriteLine("1111111111111111111111");
                    Console.WriteLine($"{nameof(delay)}={delay}, {nameof(sum)}={sum}");
                    sum     += delta;
                    _awaiter = MyDelayReturn(sum).GetAwaiter();
                    if (_awaiter.IsCompleted)
                    {
                        goto case 2;
                    }
                    else
                    {
                        MySleep(3600, 1000);
                        _self = this;
                        _asyncBuiler.AwaitUnsafeOnCompleted(ref _awaiter, ref _self);
                    }
                }
                break;

                case 2:
                {
                    _state = 3;

                    delay = _awaiter.GetResult();
                    Console.WriteLine("22222222222222222222222");
                    Console.WriteLine($"{nameof(delay)}={delay}, {nameof(sum)}={sum}");
                    sum     += delta;
                    _awaiter = MyDelayReturn(sum).GetAwaiter();
                    if (_awaiter.IsCompleted)
                    {
                        goto case 3;
                    }
                    else
                    {
                        MySleep(3600, 1000);
                        _self = this;
                        _asyncBuiler.AwaitUnsafeOnCompleted(ref _awaiter, ref _self);
                    }
                }
                break;

                case 3:
                {
                    _state = 4;

                    delay = _awaiter.GetResult();
                    Console.WriteLine("33333333333333333333333333");
                    Console.WriteLine($"{nameof(delay)}={delay}, {nameof(sum)}={sum}");
                    sum += delta;
                    Console.WriteLine();
                    _asyncBuiler.SetResult(sum);
                }
                break;
                }
                //throw new NotImplementedException();
            }
示例#3
0
        public static Task <int> RunByStateMachine()
        {
            var statMachine = new RunAsyncStateMachine();

            return(statMachine.Start());
        }