c# - 事件聚合器确认

标签 c# wcf prism eventaggregator

我想知道是否有一种方法可以在单一方法中从发布的事件中获取结果。 我有一个 wcf 服务,这里是其中一种方法的实现:

public Result DisplayMessage(string message)
{
     // some error handling
     if(errorOccurred)
     {
         return new Result { IsError = true, ErrorMessage = "error occurred"}
     }

     eventAggregator.GetEvent<DisplayMessageEvent>().Publish(new DisplayMessageEventArg(message));

     return new Result { IsError = false, ErrorMessage = String.Empty };
}

如您所见,我的 wcf 方法返回的结果会通知调用方是否发生错误。我可以在发布事件之前进行一些错误处理,但如果 DisplayMessageEvent 订阅方发生某些事情,我还想返回相关结果。通常我会做一些类似 DisplayMessageConfirmationEvent 的事情,然后从订阅者发送这个事件给发布者,但是如何在单一方法中做到这一点? 所以换句话说,基本上我想要做的是发布事件,等待订阅者的结果并将其返回给 WCF 调用者。有什么想法吗?

最佳答案

EventAggregator仅用于即发即弃消息传递。可能您想使用某种其他类型的消息传递系统来支持带有结果的消息。

也就是说,您可以等待另一个事件,然后继续您的方法:

public Result DisplayMessage(string message)
{
     // some error handling
     if(errorOccurred)
     {
         return new Result { IsError = true, ErrorMessage = "error occurred"}
     }

     eventAggregator.GetEvent<DisplayMessageEvent>().Publish(new DisplayMessageEventArg(message));

     var result = new TaskCompletionSource<Result>();
     eventAggregator.GetEvent<DisplayMessageAnswerEvent>().Subscribe( x => result.SetResult( x ) );

     return result.Result;
}

DisplayMessageAnswerEvent作为PubSubEvent<Result> ...

请注意,原始事件的订阅者必须始终发送答案,否则您将永远陷入困境。

关于c# - 事件聚合器确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980342/

相关文章:

c# - 从用户控件访问父窗口的网格

C# 脚本与 C# 编程

web-services - 使用 Windows 身份验证设置安全 SSL、WCF

c# - WCF服务将数据集与数据类作为返回类型

c# - 找不到 Prism.Navigation.TabbedPages 命名空间

c# - 用于删除文字格式的正则表达式模式

c# - WPF 从父级覆盖 IsEnabled

wcf - WCF 服务之间的共享 session

c# - 使用共享服务的示例。 Prism

c# - 将 Silverlight MVVM 与 Prism/Unity 结合使用,并且需要检测 View 何时关闭