如何将异步方法的结果添加到 Glimpse Broker?
How can I add the result of an asynchronous method to the 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>();
}
另外 - 我将 ExternalRequestMessage
s 从同步上下文放到代理上,这些消息按预期显示在选项卡中。
任何人都可以阐明这里发生的事情吗?
编辑: 我应该补充一点,我正在使用 ContinueWith
因为我不希望应用等待结果只是为了将消息添加到代理, 所以只使用 task.Result
不是一个选项。
想通了-
我的 web.config
文件有
<appSettings>
<add key="Glimpse:DisableAsyncSupport" value="true"/>
</appSettings>
删除此值或将其设置为 false 可解决问题。
标题说明了一切。
我想将一些关于 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>();
}
另外 - 我将 ExternalRequestMessage
s 从同步上下文放到代理上,这些消息按预期显示在选项卡中。
任何人都可以阐明这里发生的事情吗?
编辑: 我应该补充一点,我正在使用 ContinueWith
因为我不希望应用等待结果只是为了将消息添加到代理, 所以只使用 task.Result
不是一个选项。
想通了-
我的 web.config
文件有
<appSettings>
<add key="Glimpse:DisableAsyncSupport" value="true"/>
</appSettings>
删除此值或将其设置为 false 可解决问题。