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(); });
public IEnumerator LinkedTokenTest() => UniTask.ToCoroutine(async() => { var cts = new CancellationTokenSource(); var controller = new TimeoutController(cts); var token = controller.Timeout(TimeSpan.FromSeconds(2)); await UniTask.DelayFrame(3); cts.Cancel(); token.IsCancellationRequested.Should().BeTrue(); controller.Dispose(); });
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(); });