Как я могу добавить результат асинхронного метода в Glimpse Broker?

Название говорит само за себя.

Я хотел бы поместить некоторую информацию о результате метода async в брокер сообщений Glimpse. Я пытался использовать 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>();
    }

Кроме того, я помещаю ExternalRequestMessages в брокера из синхронного контекста, и эти сообщения отображаются на вкладке, как и ожидалось.

Кто-нибудь может пролить свет на то, что здесь происходит?

Редактировать: я должен добавить, что я использую ContinueWith, так как я не хочу, чтобы приложение ждало результата только для того, чтобы добавить сообщение в брокер, поэтому просто использовать task.Result не вариант.


person Chris Payne    schedule 15.01.2015    source источник
comment
Использование Task.Result с async-await редко возможно.   -  person Paulo Morgado    schedule 16.01.2015
comment
Вы пытались установить точку останова в своем продолжении и отладить его? Возможно, это исключение?   -  person Yuval Itzchakov    schedule 16.01.2015
comment
Да, я сделал это. Код выполняется без проблем. Никаких исключений не выбрасывается. Я почти уверен, что это проблема Glimpse или какая-то проблема с областью действия брокера сообщений при работе в нескольких потоках.   -  person Chris Payne    schedule 16.01.2015
comment
Возможно, у вас есть несколько экземпляров вашего брокера из-за проблем с потоками.   -  person Yuval Itzchakov    schedule 16.01.2015
comment
Что ж, это моя догадка, но я только предполагаю. Я надеюсь, что кто-то с большим опытом работы с Glimpse сможет подтвердить эти подозрения и, возможно, даже предложить обходной путь.   -  person Chris Payne    schedule 16.01.2015


Ответы (1)


Выяснил это-

В моем файле web.config было

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

Удаление этого значения или присвоение ему значения false решает проблему.

person Chris Payne    schedule 19.01.2015