Re[6]: Почему не отменяется задача?
От: Mystic Artifact  
Дата: 16.03.21 00:22
Оценка:
Здравствуйте, Passerby, Вы писали:

P>А вообще схема правильная решения задачи или можно решить без вызова исключений?

Специально провоцировать их не стоит. Но и специально их избегать, без необходимости — так же смысла не имеет.

По сути всё сводится к метрике: сколько исключений генерируется в секунду и она в среднем должна быть адекватной (около ноля).

А насчет схемы в целом — то, ну, в целом как бы похоже, но не совсем. У меня такое чувство, что ты пытаешься сделать обычное чтение с таймаутом, и отсюда вопрос — это что/чем ты читаешь, что готового таймаута нет?

Ну, а если ты хочешь сделать ReadAsync с таймаутом руками, то цикл в Main не должен вообще манипулировать CTS (по крайней мере не в таком смысле).

CTS создается, в ReadAsync, запускается таймер (например через Task.Delay, но проще/лучше использовать CancelAfter), делается ее продолжение отменяющий CTS (в случае если используется Task.Delay). И запускается задача/настоящее чтение которая может быть отменена по таймауту (посредством только что созданного CTS). Еще не забываем, что в ReadAsync мы можем захотеть передать свой токен, и теперь нам нужно уже ждать на двух токенах — т.е. в самом начале создаем Linked CTS, а не обычный. В общем, оно не сложно делается, стандартный подход для библиотечного кода. Но я не понял точно ли это тебе нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.