Search Results for

    Show / Hide Table of Contents

    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);
                });
        }
    }
    
    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