2015-06-01 38 views
3

我可能做了一些不正確的事情,但並不明顯。我有以下代碼:Akka.NET詢問任務永不完成

namespace test 
    { 
     class Program 
      { 
      static void Main(string[] args) 

       { 
        using (var system = ActorSystem.Create("MySystem")) 
        { 
         var testPassRetriever = system.ActorOf<PrintActor>(); 
         var task = testPassRetriever.Ask<PrintActorMsg>(new PrintActorMsg()); 

         // prevent the application from exiting before message is handled 
         task.Wait(); 
         Console.WriteLine("Finished."); 
         Console.ReadLine(); 
        } 
       } 
     } 
     class PrintActorMsg{} 

     class PrintActor : ReceiveActor 
     { 
      public PrintActor() 
      { 
      Receive<PrintActorMsg>(msg => Console.WriteLine("foo")); 
      } 
     } 
}// namespace test 

的問題是,任務返回的詢問永遠不會完成。其狀態保持在等待激活狀態。 「Foo」確實打印在命令行上,因此我知道該演員正在處理「打印」消息。在重寫的演員PrintMsg中是否還有別的東西可以標記任務完成?

+0

不會Task.Run在這裏受益嗎? – whoisj

+2

我不這麼認爲,我相信任務已經在運行(由Akka.net框架處理)。我正在獲得成功運行任務的結果。我只是等待任務完成。 –

+0

嘗試像'Task.Run(async()=> {/ *你的使用語句* /)。等待();'看看是否有幫助。並且放下'while(...)'和'task.Wait;'東西。 – whoisj

回答

6

您使用詢問模式,但從不發回消息。詢問任務僅在從演員接收到消息時完成。 (有時是建議的)告訴或者即發即逝模式不會這樣做。

+3

我必須更改PrintActor以致電 Sender.Tell(new PrintActorMsg()); –