using System.Threading.Tasks;
using System.Runtime.CompilerServices;
public static void Main()
Console.WriteLine("Hello World");
static async Task<int> GetNum1FromInternetAsync() { return 1; }
static async Task<int> GetNum2FromInternetAsync() { return 2; }
class GetSumAsyncCustomStateMachine : IAsyncStateMachine
public AsyncTaskMethodBuilder<int> TaskBuilder;
TaskAwaiter<int> _awaiterHelper;
public GetSumAsyncCustomStateMachine()
if(_step == Step.Beginning)
_awaiterHelper = GetNum1FromInternetAsync().GetAwaiter();
TaskBuilder.AwaitUnsafeOnCompleted(ref _awaiterHelper, ref me);
_step = Step.AfterGotNum1;
else if(_step == Step.AfterGotNum1)
_num1 = _awaiterHelper.GetResult();
_awaiterHelper = GetNum2FromInternetAsync().GetAwaiter();
TaskBuilder.AwaitUnsafeOnCompleted(ref _awaiterHelper, ref me);
_step = Step.AfterGotNum2;
else if(_step == Step.AfterGotNum2)
_num2 = _awaiterHelper.GetResult();
TaskBuilder.SetResult(_num1 + _num2);
public void SetStateMachine(IAsyncStateMachine m) {}