Description
In order to prepare for the async interface, one part of the whole library is the RpcContinuationQueue. With the current implementation we can not support async waiting on completion.
=> I propose to use a IValueTaskSource and create a class that handles this.
This way we could set the reply with one method and have another which you could use to wait.
void SetReply(in IncomingCommand cmd)
ValueTask<IncomingCommand> GetReplyAsync()
instead of the current (used my latest branch to experiment)
IncomingCommand GetReply()
void HandleCommand(in IncomingCommand cmd)
With this implementation we can avoid a lot of allocations for an RPC await.
I have a very basic working prototype up and running locally.
If the extended functionality (timeout, shutdown) is fully implmented and working, I'll set up a PR for the current sync API with GetReplyAsync().AsTask.GetAwaiter().GetResult().
in every public API. => Async under the hood, so we'd ready to switch.