Skip to content

Instantly share code, notes, and snippets.

@JsAndDotNet
Created May 23, 2022 06:50
Show Gist options
  • Save JsAndDotNet/5bd8febe8514b7e77442bb3e14b93860 to your computer and use it in GitHub Desktop.
Save JsAndDotNet/5bd8febe8514b7e77442bb3e14b93860 to your computer and use it in GitHub Desktop.
AKKA.NET - Very Basic Example with Tell and Ask
using Akka.Actor;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AkkaHelloWorld
{
public class SimpleMessageActor : ReceiveActor
{
public string LastMessage { get; set; }
public SimpleMessageActor()
{
Receive<SimpleMessage>(greet =>
{
Console.WriteLine("[Thread {0}] Actor {1}", Thread.CurrentThread.ManagedThreadId, greet.Message);
LastMessage = greet.Message;
});
Receive<AskRequest>(greet =>
{
Sender.Tell(new AskMessageResponse("Actor says:" + LastMessage ?? "notset"), Self);
});
}
}
public class SimpleMessage
{
public SimpleMessage(string msg)
{
Message = msg;
}
public string Message { get; private set; }
}
public class AskRequest
{
}
public class AskMessageResponse
{
public AskMessageResponse(string msg)
{
AskMessageProp = msg;
}
public string AskMessageProp { get; private set; }
}
}
using Akka.Actor;
using AkkaHelloWorld;
Console.WriteLine("Enter a string to update the actor, or 'ask' to get its value");
var system = ActorSystem.Create("MySystem");
var greeter = system.ActorOf<SimpleMessageActor>("simplemsg");
greeter.Tell(new SimpleMessage("Starting"));
string msg = "";
int counter= 0;
while(msg != "exit")
{
var input = Console.ReadLine();
if(!input.ToLower().Contains("ask"))
{
greeter.Tell(new SimpleMessage(input));
}
else
{
// NOTE: We should avoid ask as much as possible.
var response = await greeter.Ask<AskMessageResponse>(new AskRequest(), TimeSpan.FromSeconds(30));
Console.WriteLine(response.AskMessageProp);
}
counter++;
}
Console.Read();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment