C# 服务结构参与者方法调用不返回值
我有一个简单的C#控制台应用程序,它与服务结构参与者交互,并通过参与者事件接收信息 问题是,我在客户端EventHandler上调用了一个actor方法,该方法返回一个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
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方法上,而不是只返回任务
的方法上。如果在主方法体上调用此方法,它将正常工作。