Как реализовать выход при условие=1 из Task.Delay(-1)? - C#

Узнай цену своей работы

Формулировка задачи:

Есть асинхронный таск, который подписывается на ивент, затем идёт бесконечное ожидание. Для наглядности примерная структура кода:
        bool exit = false;
        async Task Run()
        {
            ex.UpdateEvent += UpdateFunc;
            ex.Start();
            await Task.Delay(-1);
            ex.Stop();
        }
В определённой ситуации UpdateFunc() меняет значение exit на true, и дальше в таске Run() код должен пойти дальше, т.е. выполниться ex.Stop(); Конечно есть вариант сделать так:
        bool exit = false;
        async Task Run()
        {
            ex.UpdateEvent += UpdateFunc;
            ex.Start();
            while(exit==false)
                await Task.Delay(500);//частота обновления должна быть довольно таки высокая
            ex.Stop();
        }
но не будет ли это грузить систему больше и как то выглядит ненормально, как мне кажется. Хотелось бы почитать ваши мысли по данной ситуации.

Решение задачи: «Как реализовать выход при условие=1 из Task.Delay(-1)?»

textual
Листинг программы
TaskCompletionSource<bool> completion;
async Task Run()
{
   completion = new TaskCompletionSource<bool>();
   ex.UpdateEvent += UpdateFunc;
   ex.Start();
   await completion.Task;
   ex.Stop();
}
 
void UpdateFunc(object sender, EventArgs e)
{
   if (пора заканчивать)
      completion.SetResult(true);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы