Fetch an element from the queue.
If the queue is currently empty, get will block and wait until data arrive.
If there are multiple readers blocked on get,
new data will be delivered in a first-come-first-serve manner.
get itself never fail, and will wait indefinitely.
However, since get is a blocking point, the task running get may be cancelled,
in this case, an cancellation will be raised from get.