AsyncManager.ContinuationProcessorGroup.cs 948 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using System.Collections.Generic;
  2. using System.Runtime.CompilerServices;
  3. namespace UnityAsync
  4. {
  5. public partial class AsyncManager
  6. {
  7. partial class ContinuationProcessorGroup
  8. {
  9. const int InitialCapacity = 1 << 10;
  10. interface IContinuationProcessor
  11. {
  12. void Process();
  13. }
  14. readonly List<IContinuationProcessor> processors;
  15. public ContinuationProcessorGroup()
  16. {
  17. processors = new List<IContinuationProcessor>(16);
  18. }
  19. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  20. public void Add<T>(in T cont) where T : IAwaitInstructionAwaiter
  21. {
  22. var p = ContinuationProcessor<T>.instance;
  23. if(p == null)
  24. {
  25. p = ContinuationProcessor<T>.instance = new ContinuationProcessor<T>(InitialCapacity);
  26. processors.Add(ContinuationProcessor<T>.instance);
  27. }
  28. p.Add(cont);
  29. }
  30. public void Process()
  31. {
  32. for(int i = 0; i < processors.Count; ++i)
  33. processors[i].Process();
  34. }
  35. }
  36. }
  37. }