Search Results for

    Show / Hide Table of Contents

    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");
        }
    }
    
    In this article
    • githubEdit this page
    Back to top
    Contribute
    • Project Chat
    • Discussion Forum
    • Source Code
    Support
    • Akka.NET Support Plans
    • Akka.NET Observability Tools
    • Akka.NET Training & Consulting
    Maintained By
    • Petabridge - The Akka.NET Company
    • Learn Akka.NET