C# protoactor - Akka.NETs pipeto 的替代品?

C# protoactor - alternative to Akka.NETs pipeto?

在 Akka 和 Akka.Net 中有 PipeTo pattern 用于处理异步内容(如 I/O)并将消息通过管道返回给演员的消息框。 如何在 Protoactor 中完成?

在Proto.Actor中有两种处理异步动作的方法。 第一种是简单地 await 任务,因为 Proto.Actor 完全支持异步等待。 但是您可能知道,这将阻止 actor 在等待期间处理其他消息。

PipeTo 类似的另一种选择是ReenterAfter。 这与 PipeTo 相同,但不发送消息而是触发回调:

public Task ReceiveAsync(IContext context)
{
     var task = GetSomeAsyncTask(...);
     context.ReenterAfter(task, t => {
         //code inside here will run when the task completes.
         //still preserving actor concurrency constraints
     });
}

这通常使代码比 PipeTo 更易于推理,因为它会强制您发送消息并添加另一个消息处理程序。使用 ReenterAfter,你会得到相同的效果,并发性仍然受到 actor 的限制,但你可以通过这种方式构建整个工作流。