День добрый
Пишу прогу, .Net c# WPF, принимает и обрабатывает данные по COM порту. Используется SerialPorts из System.IO.Ports.dll
Красным полупрозрачным маркером на скринах выделено то, что по моему не влияет на ошибку. Элементы wpf и другая "косметика"

Метод CloseSerial сначала переключает int portState в 0, за которым следят while(след скрин), потом закрывает порт
portState используется в:

асинхронный метод запускается после открытия порта с помощью:

Открывается порт нормально, и закрывается тоже.... если не читать с него строки.
А именно: Если убрать строчку

из метода GetData, он запускается и выключается нормально. Но информацию, понятно, не читает.
При попытке закрыть порт, когда он читается, вылазит тот самый System.OperationCanceledException"

Приложение крашит, обработать исключение у меня не получилось. Инфы в инете тоже нету, только решенные вопросы по Azure, но там не мой случай. На learn.microsoft ничего толком не понял, как то слишком профессионально у них написано
Что сделал:
Думал порт долго закрывается. Но!

Последнее сообщение в выводе перед возникновением исключения - Next hop SerialP.Close()
Оно пишется перед закрытием порта в CloseSerial()

Плюс не сработали эти writeline-ы

Тогда я вообще не понимаю как RawData = SerialP.ReadLine(); сработал. Ведь если writeline-ы не сработали, значит до трая программа не дошла, ведь не прошло условие SerialP.IsOpen == true | portState == 1. Если оно не прошло, значит порт закрыт.
Все равно я пробовал ставить таймауты(Thread.Sleep)
Пробовал читать посимвольно. Результат тот же.
Пробовал SerialPort.Dispose();
Пробовал много разных проверок и (опять же) обработки исключения
Подскажите пожалуйста что делаю не так
Подскажите нужно ли целиком код опубликовать для решения вопроса. И если да, то каким образом лучше это сделать