2015-01-15 42 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可以解決此問題。