ETCancellationTokenSource.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Threading;
  2. namespace ETModel
  3. {
  4. [ObjectSystem]
  5. public class ETCancellationTokenSourceAwakeSystem: AwakeSystem<ETCancellationTokenSource>
  6. {
  7. public override void Awake(ETCancellationTokenSource self)
  8. {
  9. self.CancellationTokenSource = new CancellationTokenSource();
  10. }
  11. }
  12. [ObjectSystem]
  13. public class ETCancellationTokenSourceAwake2System: AwakeSystem<ETCancellationTokenSource, long>
  14. {
  15. public override void Awake(ETCancellationTokenSource self, long afterTimeCancel)
  16. {
  17. self.CancellationTokenSource = new CancellationTokenSource();
  18. self.CancelAfter(afterTimeCancel).Coroutine();
  19. }
  20. }
  21. public class ETCancellationTokenSource: Component
  22. {
  23. public CancellationTokenSource CancellationTokenSource;
  24. public void Cancel()
  25. {
  26. this.CancellationTokenSource.Cancel();
  27. this.Dispose();
  28. }
  29. public async ETVoid CancelAfter(long afterTimeCancel)
  30. {
  31. await Game.Scene.GetComponent<TimerComponent>().WaitAsync(afterTimeCancel);
  32. this.CancellationTokenSource.Cancel();
  33. this.Dispose();
  34. }
  35. public CancellationToken Token
  36. {
  37. get
  38. {
  39. return this.CancellationTokenSource.Token;
  40. }
  41. }
  42. public override void Dispose()
  43. {
  44. if (this.IsDisposed)
  45. {
  46. return;
  47. }
  48. base.Dispose();
  49. this.CancellationTokenSource?.Dispose();
  50. this.CancellationTokenSource = null;
  51. }
  52. }
  53. }