コード例 #1
0
        public async Task AwaitOnCompleted_InvokesStateMachineMethods(bool awaitUnsafe)
        {
            AsyncValueTaskMethodBuilder <int> b = ValueTask <int> .CreateAsyncMethodBuilder();

            var ignored = b.Task;

            var callbackCompleted      = new TaskCompletionSource <bool>();
            IAsyncStateMachine foundSm = null;
            var dsm = new DelegateStateMachine
            {
                MoveNextDelegate        = () => callbackCompleted.SetResult(true),
                SetStateMachineDelegate = sm => foundSm = sm
            };

            TaskAwaiter t = Task.CompletedTask.GetAwaiter();

            if (awaitUnsafe)
            {
                b.AwaitUnsafeOnCompleted(ref t, ref dsm);
            }
            else
            {
                b.AwaitOnCompleted(ref t, ref dsm);
            }

            await callbackCompleted.Task;

            Assert.Equal(dsm, foundSm);
        }
コード例 #2
0
        public void AwaitOnCompleted_ForcesTaskCreation(int numAwaits, bool awaitUnsafe)
        {
            AsyncValueTaskMethodBuilder <int> b = ValueTask <int> .CreateAsyncMethodBuilder();

            var dsm             = new DelegateStateMachine();
            TaskAwaiter <int> t = new TaskCompletionSource <int>().Task.GetAwaiter();

            Assert.InRange(numAwaits, 1, int.MaxValue);
            for (int i = 1; i <= numAwaits; i++)
            {
                if (awaitUnsafe)
                {
                    b.AwaitUnsafeOnCompleted(ref t, ref dsm);
                }
                else
                {
                    b.AwaitOnCompleted(ref t, ref dsm);
                }
            }

            b.SetResult(42);

            Assert.True(WrapsTask(b.Task));
            Assert.Equal(42, b.Task.Result);
        }
コード例 #3
0
        public void Start_ExecutionContextChangesInMoveNextDontFlowOut()
        {
            var al = new AsyncLocal<int> { Value = 0 };
            int calls = 0;

            var dsm = new DelegateStateMachine
            {
                MoveNextDelegate = () =>
                {
                    al.Value++;
                    calls++;
                }
            };

            dsm.MoveNext();
            Assert.Equal(1, al.Value);
            Assert.Equal(1, calls);

            dsm.MoveNext();
            Assert.Equal(2, al.Value);
            Assert.Equal(2, calls);

            AsyncValueTaskMethodBuilder<int> b = ValueTask<int>.CreateAsyncMethodBuilder();
            b.Start(ref dsm);
            Assert.Equal(2, al.Value); // change should not be visible
            Assert.Equal(3, calls);

            // Make sure we've not caused the Task to be allocated
            b.SetResult(42);
            ValueTask<int> vt = b.Task;
            Assert.NotSame(vt.AsTask(), vt.AsTask());
        }
コード例 #4
0
 public void Start_InvokesMoveNext()
 {
     AsyncValueTaskMethodBuilder<int> b = ValueTask<int>.CreateAsyncMethodBuilder();
     int invokes = 0;
     var dsm = new DelegateStateMachine { MoveNextDelegate = () => invokes++ };
     b.Start(ref dsm);
     Assert.Equal(1, invokes);
 }
コード例 #5
0
ファイル: GameManager.cs プロジェクト: CJRutter/LudumDare45
    public override void Init()
    {
        base.Init();

        gameStates = new DelegateStateMachine <System.Type>();

        Instance = this;

        CreateGameStates();
        GotoPlay();

        Player = AddChild <Player>(PlayerPrefab);
    }
コード例 #6
0
        public async Task AwaitOnCompleted_InvokesStateMachineMethods(bool awaitUnsafe)
        {
            AsyncValueTaskMethodBuilder<int> b = ValueTask<int>.CreateAsyncMethodBuilder();
            var ignored = b.Task;

            var callbackCompleted = new TaskCompletionSource<bool>();
            IAsyncStateMachine foundSm = null;
            var dsm = new DelegateStateMachine
            {
                MoveNextDelegate = () => callbackCompleted.SetResult(true),
                SetStateMachineDelegate = sm => foundSm = sm
            };

            TaskAwaiter t = Task.CompletedTask.GetAwaiter();
            if (awaitUnsafe)
            {
                b.AwaitUnsafeOnCompleted(ref t, ref dsm);
            }
            else
            {
                b.AwaitOnCompleted(ref t, ref dsm);
            }

            await callbackCompleted.Task;
            Assert.Equal(dsm, foundSm);
        }
コード例 #7
0
 protected void Awake()
 {
     _stateMachine = GetComponent<DelegateStateMachine> ();
 }