C#protoactor - 替代Akka.NETs pipeto?

Jon*_*son 4 .net c# proto.actor

在Akka和Akka.Net中,有用于处理异步内容(如I/O)的PipeTo模式,并将消息传递回actor的消息框.如何在Protoactor中完成?

Rog*_*son 6

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

另一种选择,这是类似PipeToReenterAfter.这与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
     });
}
Run Code Online (Sandbox Code Playgroud)

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