AK2004 - Error
IDslActor.Receive
message handler delegate must not be a void async delegate. Use ReceiveAsync
instead.
Cause
IDslActor.Receive
accepts an Action<TMessage, IActorContext>
as a delegate, any void async
delegate passed as an argument will be invoked as a detached asynchronous function that can cause erroneous message processing behavior.
An example:
using Akka.Actor;
using System.Threading.Tasks;
public sealed class MyClass
{
public MyClass(ActorSystem sys)
{
sys.ActorOf(act =>
{
act.Receive<int>(async (msg, context) =>
{
await Task.Yield();
context.Sender.Tell(msg);
});
}, "dslActor");
}
}
Resolution
using Akka.Actor;
using System.Threading.Tasks;
public sealed class MyClass
{
public MyClass(ActorSystem sys)
{
sys.ActorOf(act =>
{
// Use ReceiveAsync() if you're passing an asynchronous delegate
act.ReceiveAsync<int>(async (msg, context) =>
{
await Task.Yield();
context.Sender.Tell(msg);
});
}, "dslActor");
}
}