| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- namespace Fort23.Core
 
- {
 
-     public class CTaskAwaitBuffer<T> : IDisposable where T : new()
 
-     {
 
-         private List<CTask<T>> _cTasks = new List<CTask<T>>();
 
-         
 
-         private List<T> _results = new List<T>();
 
-         public CTask<T>[] GetTask
 
-         {
 
-             get { return _cTasks.ToArray(); }
 
-         }
 
-         private int count;
 
-         private CTask CTask;
 
-         private bool _isWait;
 
-         
 
-       
 
-         
 
-         public T[] GetResults()
 
-         {
 
-             
 
-             return _results.ToArray();
 
-             
 
-         }
 
-         public void Clear()
 
-         {
 
-             _cTasks.Clear();
 
-             _isWait = false;
 
-             CTask = null;
 
-             count = 0;
 
-         }
 
-         public void AddTask(CTask<T> icTaskResult)
 
-         {
 
-             _cTasks.Add(icTaskResult);
 
-             if (_isWait)
 
-             {
 
-                 count++;
 
-                 AwaitTask(icTaskResult);
 
-             }
 
-         }
 
-         public async CTask<List<T>> WaitAll()
 
-         {
 
-             _isWait = true;
 
-             count += _cTasks.Count;
 
-             if (count == 0)
 
-             {
 
-                 return new List<T>();
 
-             }
 
-             CTask = CTask.Create(false);
 
-             CTask<T>[] icTaskResults = _cTasks.ToArray();
 
-             for (int i = 0; i < icTaskResults.Length; i++)
 
-             {
 
-                 AwaitTask(icTaskResults[i]);
 
-             }
 
-             await CTask;
 
-             return new List<T>(_results);
 
-         }
 
-         public async CTask AwaitTask(CTask<T> icTaskResult)
 
-         {
 
-             T result = await icTaskResult;
 
-             _results.Add(result);
 
-             count--;
 
-             // _cTasks.Remove(icTaskResult);
 
-             if (count <= 0 && _isWait)
 
-             {
 
-                 _isWait = false;
 
-                 CTask cta = CTask;
 
-                 // if (_cTasks != null)
 
-                 // {
 
-                 //     _cTasks.Clear();
 
-                 // }
 
-                 count = 0;
 
-                 cta.SetResult();
 
-             }
 
-         }
 
-         public void Dispose()
 
-         {
 
-             _cTasks.Clear();
 
-             _results.Clear();
 
-             CTask = null;
 
-             _isWait = false;
 
-         }
 
-     }
 
- }
 
 
  |