Jon*_*son 4 .net c# proto.actor
在Akka和Akka.Net中,有用于处理异步内容(如I/O)的PipeTo模式,并将消息传递回actor的消息框.如何在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
});
}
Run Code Online (Sandbox Code Playgroud)
这通常使代码比PipeTo更容易推理,因为这会强制您发送消息并添加另一个消息处理程序.使用ReenterAfter,您可以获得相同的效果,仍然受到actor的约束,但您可以通过这种方式构建整个工作流.