EventAggregator确认

时间:2016-10-11 15:00:36

标签: 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调用者。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

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;
}

DisplayMessageAnswerEventPubSubEvent<Result> ...

请注意原始活动的订阅者始终发送回答,否则您将永远陷入困境。