예제 #1
0
		public void AwaitUnsafeOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
		where TAwaiter : ICriticalNotifyCompletion
			where TStateMachine : IAsyncStateMachine {
			if (moveNext == null) {
				var runner = new MoveNextRunner<TStateMachine>();
				moveNext = runner.Run;
				runner.StateMachine = stateMachine; // set after create delegate.
			}

			awaiter.UnsafeOnCompleted(moveNext);
		}
예제 #2
0
		public void AwaitOnCompleted<TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
		where TAwaiter : INotifyCompletion
			where TStateMachine : IAsyncStateMachine {
			if (moveNext == null) {
				if (promise == null) {
					promise = new UniTaskCompletionSource(); // built future.
				}

				var runner = new MoveNextRunner<TStateMachine>();
				moveNext = runner.Run;
				runner.StateMachine = stateMachine; // set after create delegate.
			}

			awaiter.OnCompleted(moveNext);
		}
        public void AwaitUnsafeOnCompleted <TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
            where TAwaiter : ICriticalNotifyCompletion
            where TStateMachine : IAsyncStateMachine
        {
            if (moveNext == null)
            {
                var runner = new MoveNextRunner();
                moveNext = runner.Run;

                var boxed = (IAsyncStateMachine)stateMachine;
                runner.StateMachine = boxed; // boxed
            }

            awaiter.UnsafeOnCompleted(moveNext);
        }
        public void AwaitOnCompleted <TAwaiter, TStateMachine>(ref TAwaiter awaiter, ref TStateMachine stateMachine)
            where TAwaiter : INotifyCompletion
            where TStateMachine : IAsyncStateMachine
        {
            if (moveNext == null)
            {
                if (promise == null)
                {
                    promise = new UniTaskCompletionSource <AsyncUnit>(); // built future.
                }

                var runner = new MoveNextRunner();
                moveNext = runner.Run;

                var boxed = (IAsyncStateMachine)stateMachine;
                runner.StateMachine = boxed; // boxed
            }

            awaiter.OnCompleted(moveNext);
        }