compatible with std::sync::mpsc except for both thread and coroutine please ref the doc from std::sync::mpsc