2015-01-15 31 views
0

标题说明了一切。如何将异步方法的结果添加到Glimpse Broker?

我想将关于async方法结果的一些信息放入Glimpse Message Broker。我试图用Task.ContinueWith此:

 task.ContinueWith((t) => 
     {     
      var response = t.Result; 
      var message = new ExternalRequestMessage 
      { 
       Url = url, 
       Method = method, 
       RequestBody = requestBody, 
       WasAsync = true, 
       StatusCode = (int)response.StatusCode, 
       Status = response.StatusCode.ToString(), 
       WasSuccess = response.IsSuccessStatusCode, 
       Fault = response.Fault, 
      }; 

      if (messageBroker != null) 
      { 
       messageBroker.Publish(message); 
      } 
     }); 

这段代码的执行没有问题,我可以把一个断点,并通过,所以我知道它执行后续的代码。

但是,当我来阅读经纪人的消息时,他们不在那里。例如,下面的标签的代码断点示出了消息是不是有:

public override object GetData(ITabContext context) 
    { 
     return context.GetMessages<ExternalRequestMessage>(); 
    } 

Additionally-我把ExternalRequestMessage小号到经纪人从同步上下文,并且这些消息表示的标签向上如预期。

任何人都可以点亮这里发生的一切吗?

编辑:我要补充一点,我使用ContinueWith,因为我不希望应用程序等待的结果只是将消息添加到代理,所以只是用task.Result是不是一种选择。

+0

在'async-await'中使用'Task.Result'是一个很好的选择。 – 2015-01-15 23:26:19

+0

您是否尝试过在延续中设置断点并进行调试?也许它抛出一个例外? – 2015-01-16 09:30:33

+0

是的,我已经做到了。代码执行没有问题。没有例外被抛出。我很确定这是一个Glimpse问题,或者是在多线程上运行时,消息代理的作用域的问题。 – 2015-01-16 09:48:33

回答

0

想通了这OUT-

web.config文件有

<appSettings> 
    <add key="Glimpse:DisableAsyncSupport" value="true"/> 
</appSettings> 

删除此值或将其设置为false可以解决此问题。

相关问题