Всем привет. Есть IEnumerable> tasks, Нужно запустить каждую с одинаковым делеем и после подождать выполнения всех и выйти с метода. bool возвращает выполнена таска полностью или нет, если не выполнена нужно выйти из метода со значением false, если все GetResult == true выходим со значением true. Если во время запуска тасок одна из них была завершена со значением false прекращаем запуск остальных и выходим.
[Serializable]
public class DelayedSequence : IRunnable
{
[SerializeField] private float _delay;
public async UniTask<bool> Run(IEnumerable<UniTask<bool>> tasks)
{
var awaiters = new List<UniTask<bool>.Awaiter>();
foreach (var task in tasks)
{
awaiters.Add(task.GetAwaiter());
await UniTask.Delay(TimeSpan.FromSeconds(_delay));
foreach (var awaiter in awaiters)
{
if (!awaiter.IsCompleted)
{
continue;
}
if (!awaiter.GetResult())
{
return false;
}
}
}
while (true)
{
var countCompletes = awaiters.Count;
foreach (var awaiter in awaiters)
{
if (!awaiter.IsCompleted)
{
countCompletes--;
if (countCompletes == 0)
{
return awaiters.All(item => item.GetResult());
}
continue;
}
if (!awaiter.GetResult())
{
return false;
}
}
await UniTask.Yield();
}
}
}