|
- #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
-
- using System.Threading;
- using UnityEngine;
- using Cysharp.Threading.Tasks.Triggers;
- using System;
- using Cysharp.Threading.Tasks.Internal;
-
- namespace Cysharp.Threading.Tasks
- {
-
- public static partial class CancellationTokenSourceExtensions
- {
- readonly static Action<object> CancelCancellationTokenSourceStateDelegate = new Action<object>(CancelCancellationTokenSourceState);
-
- static void CancelCancellationTokenSourceState(object state)
- {
- var cts = (CancellationTokenSource)state;
- cts.Cancel();
- }
-
- public static IDisposable CancelAfterSlim(this CancellationTokenSource cts, int millisecondsDelay, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming delayTiming = PlayerLoopTiming.Update)
- {
- return CancelAfterSlim(cts, TimeSpan.FromMilliseconds(millisecondsDelay), delayType, delayTiming);
- }
-
- public static IDisposable CancelAfterSlim(this CancellationTokenSource cts, TimeSpan delayTimeSpan, DelayType delayType = DelayType.DeltaTime, PlayerLoopTiming delayTiming = PlayerLoopTiming.Update)
- {
- return PlayerLoopTimer.StartNew(delayTimeSpan, false, delayType, delayTiming, cts.Token, CancelCancellationTokenSourceStateDelegate, cts);
- }
-
- public static void RegisterRaiseCancelOnDestroy(this CancellationTokenSource cts, Component component)
- {
- RegisterRaiseCancelOnDestroy(cts, component.gameObject);
- }
-
- public static void RegisterRaiseCancelOnDestroy(this CancellationTokenSource cts, GameObject gameObject)
- {
- var trigger = gameObject.GetAsyncDestroyTrigger();
- trigger.CancellationToken.RegisterWithoutCaptureExecutionContext(CancelCancellationTokenSourceStateDelegate, cts);
- }
- }
- }
|