public void MoveNext() { switch (_state) { case 1: { buffer = new byte[BUFFER_SIZE * 128]; Random ran = new Random(); ran.NextBytes(buffer); fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None, BUFFER_SIZE, FileOptions.Asynchronous); //await fs.WriteAsync(buffer, 0, buffer.Length); _awaiter = fs.WriteAsync(buffer, 0, buffer.Length).GetAwaiter(); if (_awaiter.IsCompleted) { goto case 2; } else { _state = 2; _self = this; _builder.AwaitUnsafeOnCompleted(ref _awaiter, ref _self); } } break; case 2: { Console.WriteLine("Write finished!"); fs?.Dispose(); _builder.SetResult(); } break; } }
public Task Start() { _self = this; _builder.Start(ref _self); return(_builder.Task); }
public static Task Case1() { AsyncMethodStateMachine stateMachine = new AsyncMethodStateMachine(); return(stateMachine.Start()); }