The Obligatory Hello World
This example shows how to define and consume actors in both C# and F#
Hello World using the C# API
Define a message:
// Create an (immutable) message type that your actor will respond to
public class Greet
{
    public Greet(string who)
    {
        Who = who;
    }
    public string Who { get;private set; }
}
Define your actor using the ReceiveActor API
// Create the actor class
public class GreetingActor : ReceiveActor
{
    public GreetingActor()
    {
        Receive<Greet>(greet => Console.WriteLine("Hello {0}", greet.Who));
    }
}
..or using the TypedActor API
public class GreetingActor : TypedActor , IHandle<Greet>
{
    public void Handle(Greet greet)
    {
        Console.WriteLine("Hello {0}!", greet.Who);
    }
}
Usage:
// Create a new actor system (a container for your actors)
var system = ActorSystem.Create("MySystem");
// Create your actor and get a reference to it.
// This will be an "IActorRef", which is not a reference to the actual actor
// instance but rather a client or proxy to it.
var greeter = system.ActorOf<GreetingActor>("greeter");
// Send a message to the actor.
greeter.Tell(new Greet("World"));
// This prevents the app from exiting
// before the async work is done.
Console.ReadLine();
See also:
- [[Untyped actors]].
 - [[Typed actors]].
 
Hello World using the F# API
// Create an (immutable) message type that your actor will respond to
type Greet = Greet of string
let system = ActorSystem.Create "MySystem"
// Use F# computation expression with tail-recursive loop
// to create an actor message handler and return a reference
let greeter = spawn system "greeter" <| fun mailbox ->
    let rec loop() = actor {
        let! msg = mailbox.Receive()
        match msg with
        | Greet who -> printf "Hello, %s!\n" who
        return! loop() }
    loop()
greeter <! Greet "World"