首页 > 解决方案 > 为什么akka.net IActorRef.Tell(),message参数的字段不需要是volatile的?

问题描述

为什么学习akka.net,我在调用IActorRef.Tell时释放,参数的字段不需要是volatile

public class Model{
        public volatile string Name;
    }

在以下示例中,Name 属性不需要是易变的。

using System;
using Akka.Actor;

namespace WinTail
{
    class Program
    {
        public static ActorSystem MyActorSystem;


        static void Main(string[] args)
        {
            // make an actor system 
            MyActorSystem = ActorSystem.Create("MyActorSystem");

            // make our first actors!
            IActorRef consoleWriterActor = MyActorSystem.ActorOf(Props.Create(() => new ConsoleWriterActor()),
                "consoleWriterActor");

            Model model = new Model();
            model.Name = "jack";
            model.Name = "tom";
            // tell console reader to begin
            consoleReaderActor.Tell(model);

            Console.ReadLine();
        }


    }


    public class Model{
        public string Name;
    }
}

标签: volatileakka.net

解决方案


volatile关键字表示一个字段可能被多个线程修改。因为消息不变性是设计基于参与者的系统时的关键原则之一,所以不需要 volatile 修饰符,因为消息应该是不可变的。为了安全起见,您需要将您的更改Model为不可变的。


推荐阅读