Asynchronous I/O that doesn’t get in your way, written in D
Waits for messages and calls the callback with the channel and the message as arguments.
The timeout is passed over to the listener, which closes after the period of inactivity.
Use 0.seconds timeout to specify a very long time (365 days)
Errors will be sent to Callback Delegate on channel "Error".