0

Отправляю с windows forms C# пакет данных в микроконтроллер, и теперь нужно дождаться ответа о правильности проверки CRC-пакета, думаю запустить еще таймер, например прошло время, ответ не пришел, значит ошибка. Пока еще мало опыта в работе на C#, сделал так:

while(читаем файл по строке и передаем в порт)
{ /*выставляем флаг занятости и висим здесь пока не придет ответ о статусе очистки памяти*/
    DelayBeforeNextOperation = true;
    ResetDelay(true);
    while (DelayBeforeNextOperation == true)
        System.Threading.Thread.Sleep(1);
}//ждать флага что мк свободен или флага ошибки

Но это очень не правильно, если флаг не придет программа зависает. Как это правильно делается на Async/await, правильность оформления и т.п. Может кто может поделится пару строками примера?

aepot
  • 49,560
Sech
  • 45
  • 6
  • Не совсем понятно, где именно этот код вызывается. Постарайтесь добавить чуть больше кода. А так, из вашего описания - если хотите дождаться выполнения какой-то таски - можете воспользоваться Wait(), по аналогии с этим ответом https://stackoverflow.com/a/15151444/13123688. Возможно, в вашей задаче подойдёт обычная реализация async-await, по аналогии с этим ответом https://stackoverflow.com/a/14178317/13123688. Опять же, это гадание на кофейной гуще - нужно больше кода. – Frehzy Jun 18 '22 at 17:50
  • 2
    @Frehzy Wait() это шило на мыло, человек спрашивает как от синхронного ожидания избавиться, а вы ему его же и предлагаете. Никаких Task.Wait() категорически использовать в асинхронной среде нельзя. В лучшем случае это будет то же зависание формы, в худшем - дедлок. – aepot Jun 18 '22 at 18:13

0 Answers0