コード例 #1
0
        public IEnumerator TimeoutReuse() => UniTask.ToCoroutine(async() =>
        {
            var controller = new TimeoutController(DelayType.DeltaTime);

            var token = controller.Timeout(TimeSpan.FromSeconds(2));

            var complete = new UniTaskCompletionSource();
            token.RegisterWithoutCaptureExecutionContext(() =>
            {
                complete.TrySetResult(); // reuse, used same token?
            });

            await UniTask.Delay(TimeSpan.FromMilliseconds(100));
            controller.Reset();

            controller.IsTimeout().Should().BeFalse();

            var sw = Stopwatch.StartNew();

            controller.Timeout(TimeSpan.FromSeconds(5));

            await complete.Task;

            UnityEngine.Debug.Log(UnityEngine.Time.timeScale);
            Between(TimeSpan.FromSeconds(4.9), sw.Elapsed, TimeSpan.FromSeconds(5.1));

            controller.IsTimeout().Should().BeTrue();
        });
コード例 #2
0
        public IEnumerator TimeoutController() => UniTask.ToCoroutine(async() =>
        {
            var controller = new TimeoutController();

            var token = controller.Timeout(TimeSpan.FromSeconds(1));

            var complete = new UniTaskCompletionSource();
            token.RegisterWithoutCaptureExecutionContext(() =>
            {
                complete.TrySetResult();
            });

            var sw = Stopwatch.StartNew();
            await complete.Task;
            Between(TimeSpan.FromSeconds(0.9), sw.Elapsed, TimeSpan.FromSeconds(1.1));

            controller.IsTimeout().Should().BeTrue();
        });