首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventAggregator确认

EventAggregator确认
EN

Stack Overflow用户
提问于 2016-10-11 15:00:35
回答 1查看 742关注 0票数 1

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

代码语言:javascript
复制
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调用者。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-11 18:03:41

EventAggregator只用于触发和忘记消息。您可能希望使用其他类型的消息传递系统来支持具有结果的消息。

尽管如此,您可以等待另一个事件,然后继续您的方法:

代码语言:javascript
复制
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>..。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39980342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档