45 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| #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);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 |