【发布时间】:2016-02-04 02:25:55
【问题描述】:
此消息在最简单的 Akka.net 示例应用程序中写入控制台。
[INFO][11/3/2015 7:21:06 PM][线程 0008][akka://TestActorSystem/user] 来自 akka://TestActorSystem/user 的消息 DeathWatchNotification 到 akka://TestActorSystem/user 未交付。 1个死信 遇到过。
这是非常简单的代码,您所做的只是创建一个演员,但您从不发送任何消息。
using System;
using Akka.Actor;
namespace AkkaNetTest {
class Program {
static void Main(string[] args) {
ActorSystem testActorSystem = ActorSystem.Create("TestActorSystem");
Console.WriteLine("Actor system 'TestActorSystem' created");
IActorRef testActor = testActorSystem.ActorOf<TestActor>("Test");
Console.WriteLine("Press a key to shutdown the 'TestActorSystem' actor system");
Console.ReadKey();
Console.WriteLine("Attempting to shutdown the actor system");
testActorSystem.Shutdown();
Console.WriteLine("Waiting for the actor system to terminate.");
testActorSystem.AwaitTermination();
Console.WriteLine("Actor system shutdown, press any key to exit");
Console.ReadKey();
}
}
public class TestActor : ReceiveActor { }
}
我运行的环境是:
- Windows 10 RTM 内部版本 10240
- Visual Studio 2013 更新 5
- Akka.Net 通过 NeGet 1.0.4.12
- 目标框架.NET 4.5
- 安装框架 .NET 4.5.2
- 控制台应用程序
- 任何 CPU
当您运行这个简单的应用程序时,只要调用了ActorSystem.AwaitTermination(),就会出现上面的 Akka.net 输出。
它出现在我尝试创建的所有 Akka.net 应用程序中,并且我能够在这个简单的应用程序中重现它。因此,如果我发送消息或不发送消息,它总是会发生。如果您注释掉 IActorRef 行,那么您将不会收到消息,因为没有创建任何演员。
这没有任何意义,为什么会发生这种情况。如果有人可以帮助解释为什么会发生这种情况以及如何防止它发生,即使没有发送过任何消息,我也会很感激。
【问题讨论】:
-
除了在 Server 2012 R2 上,我在控制台中几乎看不到相同的设置。您是否配置了额外的日志记录?
-
记录什么?完整的代码应用程序是 20 行代码,包括 5 个控制台输出。从 NuGet 检索时使用 Akka.net 的默认值。 Akka.net 显然有自己的日志记录,它提供了输出。 Server 20012 R2 不是环境的完整复制品,因此这可能与 Windows 10 相关,但这可能与其他人发布了类似的问题但没有说明他的环境但没有为他提供解决方案无关。 stackoverflow.com/questions/32386573/…
-
我尝试在 Windows 10 机器上运行(在我提到的另一台机器上编译),它确实在该环境中打印了该消息。有趣的。它们的 CLR 版本略有不同,服务器 2012 R2 上的 4.0.30319.34209 与 Windows 10 上的 4.0.30319.42000。
-
据我所知,版本的差异对应于 .NET Framework 4.5.2 和 4.6。
-
是的,我的目标是 4.5,但我安装了 4.5.2,所以这是 Akka.net 中的错误吗?