| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- namespace Fort23.Core
 
- {
 
-     public class CTaskAwaitBuffer : IDisposable
 
-     {
 
-         private List<ICTaskResult> _cTasks = new List<ICTaskResult>();
 
-         public ICTaskResult[] GetTask
 
-         {
 
-             get { return _cTasks.ToArray(); }
 
-         } 
 
-         private int count;
 
-         private CTask CTask;
 
-         private bool _isWait;
 
-         public void Clear()
 
-         {
 
-             _cTasks.Clear();
 
-             _isWait = false;
 
-             CTask = null;
 
-             count = 0;
 
-         }
 
-         public void AddTask(ICTaskResult icTaskResult)
 
-         {
 
-             _cTasks.Add(icTaskResult);
 
-             if (_isWait)
 
-             {
 
-                 count++;
 
-                 AwaitTask(icTaskResult);
 
-             }
 
-         }
 
-         public async CTask WaitAll()
 
-         {
 
-             _isWait = true;
 
-             count += _cTasks.Count;
 
-             if (count == 0)
 
-             {
 
-                 return;
 
-             }
 
-             CTask = CTask.Create(false);
 
-             ICTaskResult[] icTaskResults=  _cTasks.ToArray();
 
-             for (int i = 0; i < icTaskResults.Length; i++)
 
-             {
 
-                 AwaitTask(icTaskResults[i]);
 
-             }
 
-             await CTask;
 
-         }
 
-         public async void AwaitTask(ICTaskResult icTaskResult)
 
-         {
 
-             await icTaskResult.AwaitTask();
 
-             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();
 
-             CTask = null;
 
-             _isWait = false;
 
-         }
 
-     }
 
- }
 
 
  |