Exemple #1
0
            private Task Start()
            {
                IoAsyncMachine self = this;

                _atm.Start(ref self);
                return(_atm.Task);
            }
Exemple #2
0
            void IAsyncStateMachine.MoveNext()
            {
                try
                {
                    switch (_state)
                    {
                    case 0:
                    {
                        _state = 1;
                        _fs    = new FileStream(
                            _filePath,               //string path,
                            FileMode.Create,         //FileMode mode,
                            FileAccess.Write,        //FileAccess access,
                            FileShare.None,          //FileShare share,
                            4096,                    //int bufferSize,
                            FileOptions.Asynchronous //,//FileOptions options
                            );
                        _buffer = new byte[4097];
                        Task twrite = _fs.WriteAsync(_buffer, 0, _buffer.Length);
                        _awaiter = twrite.GetAwaiter();
                        if (_awaiter.IsCompleted)
                        {
                            goto case 1;
                        }
                        else
                        {
                            IoAsyncMachine self = this;
                            _atm.AwaitUnsafeOnCompleted(ref _awaiter, ref self);
                        }
                    }
                    break;

                    case 1:
                    {
                        _state = 2;
                        Task tflush = _fs.FlushAsync();
                        _awaiter = tflush.GetAwaiter();
                        if (_awaiter.IsCompleted)
                        {
                            goto case 2;
                        }
                        else
                        {
                            IoAsyncMachine self = this;
                            _atm.AwaitUnsafeOnCompleted(ref _awaiter, ref self);
                        }
                    }
                    break;

                    case 2:
                    {
                        _state = 3;
                        _fs.Dispose();
                        _atm.SetResult();
                    }
                    break;

                    case 3:
                    {
                        _state = 4;
                        throw new Exception("should not go here!");
                    }
                    break;
                    }
                }
                catch (Exception ex)
                {
                    _atm.SetException(ex);
                }
            }
Exemple #3
0
            public static Task IoAsync(string filePath)
            {
                var stateMachine = new IoAsyncMachine(filePath);

                return(stateMachine.Start());
            }