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 的限制,但你可以通过这种方式构建整个工作流。
在 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 的限制,但你可以通过这种方式构建整个工作流。