C# 如何将异步方法的结果添加到代理中?

C# 如何将异步方法的结果添加到代理中?,c#,async-await,glimpse,C#,Async Await,Glimpse,标题真的说明了一切 我想把一些关于async方法的结果的信息放到消息代理中。我尝试使用任务。请继续使用执行此任务: task.ContinueWith((t) => { var response = t.Result; var message = new ExternalRequestMessage { Url = url,

标题真的说明了一切

我想把一些关于
async
方法的结果的信息放到消息代理中。我尝试使用
任务。请继续使用
执行此任务:

        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>();
    }
public覆盖对象GetData(ITabContext上下文)
{
返回context.GetMessages();
}
此外,我正在将
ExternalRequestMessage
s从同步上下文放到代理上,这些消息将按预期显示在选项卡中

有人能解释一下这里发生了什么吗

编辑:我应该补充一点,我正在使用
ContinueWith
,因为我不希望应用程序仅仅为了将消息添加到代理而等待结果,所以只使用
task.result
不是一个选项。

解决了这个问题-

我的
web.config
文件

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


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

使用
Task.Result
async wait
是一个罕见的选项。您是否尝试在继续中设置断点并对其进行调试?也许它抛出了一个例外?是的,我已经这样做了。代码执行时没有问题。没有抛出异常。我很确定这是一个窥视问题,或者在多线程上运行时message broker的范围存在某种问题。可能由于线程问题,您有多个代理实例。这是我的直觉,但我只是猜测。我希望有更多窥视经验的人能够证实这些怀疑,甚至可以提供一个工作环境。