C# 服务结构参与者方法调用不返回值

C# 服务结构参与者方法调用不返回值,c#,azure,return-value,actor,azure-service-fabric,C#,Azure,Return Value,Actor,Azure Service Fabric,我有一个简单的C#控制台应用程序,它与服务结构参与者交互,并通过参与者事件接收信息 问题是,我在客户端EventHandler上调用了一个actor方法,该方法返回一个int[]值,即使该方法在actor上正确执行(ActorEventSource messages调试),客户端也不会收到返回值,exits方法没有任何错误异常 这是客户的一个方案 class LobbyEventsHandler : IGameLobbyEvents { private GameM

我有一个简单的C#控制台应用程序,它与服务结构参与者交互,并通过参与者事件接收信息

问题是,我在客户端EventHandler上调用了一个actor方法,该方法返回一个
int[]
值,即使该方法在actor上正确执行(ActorEventSource messages调试),客户端也不会收到返回值,exits方法没有任何错误异常

这是客户的一个方案

    class LobbyEventsHandler : IGameLobbyEvents
    {
        private GameManager p_gameManager;

        public LobbyEventsHandler(GameManager i_gameManager)
        {
            p_gameManager = i_gameManager;
        }

        public void GameStart()
        {
            Console.WriteLine("Game starting");
            p_gameManager.StartGame();
        }
    }

    class GameManager
    {
        public int state;
        private int[] p_playerPosReal;
        private IGameManagerActor p_actor;
        public string playerName;

        public IGameManagerActor actor
        {
            set
            {
                p_actor = value;
            }
        }

        public GameManager()
        {
            state = 1;
        }

        public void SubscribeToLobbyEvents()
        {
            p_actor.SubscribeAsync<IGameLobbyEvents>(new LobbyEventsHandler(this));
        }

        public void StartGame()
        {
            state = 2;
            Console.WriteLine("Getting position");
            p_playerPosReal = p_actor.GetPlayerPos(playerName).Result;
            Console.WriteLine("Position gotten");
        }
    }

   class Program
    {
        static void Main(string[] args)
        {
            bool exit = false;
            GameManager gameManager = new GameManager();
            while (!exit)
            {
                gameManager.actor = ActorProxy.Create<IGameManagerActor>(new ActorId("Manager"), APP_NAME);
                gameManager.SubscribeToLobbyEvents();
                Console.ReadKey();
            }
        }
    }
class LobbyEventsHandler:IGameLobbyEvents
{
私人游戏经理p_游戏经理;
公共游说活动管理员(游戏管理员i_游戏管理员)
{
p_gameManager=i_gameManager;
}
public void GameStart()
{
Console.WriteLine(“游戏开始”);
p_gameManager.StartGame();
}
}
类游戏管理器
{
公共国家;
私有int[]p_playerPosReal;
私人IGAMEManagerator p_actor;
公共字符串播放器名称;
公共管理者角色
{
设置
{
p_actor=值;
}
}
公共游戏经理()
{
状态=1;
}
公共无效订阅的Betolobbyevents()
{
p_actor.SubscribeAsync(新的游说活动主持人(this));
}
公共无效StartName()
{
状态=2;
控制台写入线(“获取位置”);
p_playerPosReal=p_actor.GetPlayerPos(playerName).Result;
控制台。写入线(“获取位置”);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
bool exit=false;
GameManager GameManager=新GameManager();
当(!退出)
{
gameManager.actor=ActorProxy.Create(新ActorId(“Manager”),应用程序名称);
gameManager.SubscribeToLobbyEvents();
Console.ReadKey();
}
}
}
方法
GetPlayerPos
必须返回一个
Task
值,但它不起作用,参与者完成了他的执行,客户端没有捕获它


我该怎么办?

您不应该显示
GetPlayerPos
代码而不是这个片段吗?看来失败的原因就在那里。
GetPlayerPos
是一种简单的方法。它返回
字典的值
这发生在每个返回值的actor方法上,而不是只返回
任务
的方法上。如果在主方法体上调用此方法,它将正常工作。