Нет, по крайней мере, для синхронных (небуферизованных) каналов. Невозможно определить, ожидает ли значение, не запрашивая значение из канала.
Для буферизованных каналов вы технически можете использовать функцию len, чтобы делать то, что вы описываете, но вы действительно, действительно не должны. Ваша техника недействительна.
Причина в том, что оно представляет собой состояние гонки. Учитывая канал ch, ваша программа может увидеть, что len (ch)> 0, и заключить, что есть ожидающее значение. Однако он не может сделать вывод, что он может читать с канала без блокировки - другая процедура может очистить канал между временем проверки len и временем выполнения операции приема.
Для цели, которую вы описали, используйте select с регистром по умолчанию, как показал Ripounet.