AK2003 - Error
ReceiveActor.Receive
message handler delegate must not be a void async delegate. Use ReceiveAsync
instead.
Cause
ReceiveActor.Receive
accepts an Action<TMessage>
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 MyActor : ReceiveActor
{
public MyActor()
{
Receive<int>(async msg =>
{
await Task.Yield();
Sender.Tell(msg);
});
}
}
Resolution
using Akka.Actor;
using System.Threading.Tasks;
public sealed class MyActor : ReceiveActor
{
public MyActor()
{
// Use ReceiveAsync() if you're passing an asynchronous delegate
ReceiveAsync<int>(async msg =>
{
await Task.Yield();
Sender.Tell(msg);
});
}
}