Skip to content

8.0 Proposal (internal): Use IValueTaskSource for RPC continuations awaits #966

Open
@bollhals

Description

@bollhals

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions