PragmaGames
@PragmaGames
Увлекаюсь Unity.

Как подождать асинхронного выполнения всех подписчиков события?

Всем привет ! Класс Main вызывает метод PlayDelay, на Func подписаны несколько методов Run из нескольких экземпляров класса A с разной задержкой по времени, хочу что бы PlyDelay подождал все методы Run (как через UniTask.WhenAll()) Возможно ли реализовать то, что я написал ниже ? Предложите как сделать что-то похожее. Можно с использованием обычных Task

P.S Просто любопытно как такое сделать.

public class Main
{
    public Func<CancellationToken, UniTask> Func;

    private CancellationTokenSource _tokenSource;

    public async void PlayDelay()
    {
        _tokenSource = new CancellationTokenSource();

        var uniTask = Func?.Invoke(_tokenSource.Token);
        
         await uniTask.GetValueOrDefault();
    }
}

public class A
{
    private Main _main;
    
    private float _delay;

    private void OnEnable()
    {
        _main.Func += Run;
    }

    private void OnDisable()
    {
        _main.Func -= Run;
    }


    public async UniTask Run(CancellationToken token)
    {
        await UniTask.Delay(TimeSpan.FromSeconds(_delay), cancellationToken: token);
    }

}
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы