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;
- }
- }
- }
|