recv method
Implementation
Future<RecvResult<T>> recv() async {
if (localRecvChannel case final lc?) return lc.recv();
if (isRecvClosed) return const RecvErrorDisconnected();
final t0 = mx.startRecvTimer();
final v0 = buf.tryPop();
if (v0 != null) {
mx.recvOk(t0);
return RecvOk<T>(v0);
}
if (recvDisconnected) return const RecvErrorDisconnected();
while (true) {
final c = buf.addPopWaiter();
if (recvDisconnected) {
buf.removePopWaiter(c);
return const RecvErrorDisconnected();
}
try {
final v1 = await c.future;
mx.recvOk(t0);
return RecvOk<T>(v1);
} catch (e) {
return (e is RecvError) ? e : RecvErrorFailed(e);
}
}
}