Название говорит само за себя.
Я хотел бы поместить некоторую информацию о результате метода 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>();
}
Кроме того, я помещаю ExternalRequestMessage
s в брокера из синхронного контекста, и эти сообщения отображаются на вкладке, как и ожидалось.
Кто-нибудь может пролить свет на то, что здесь происходит?
Редактировать: я должен добавить, что я использую ContinueWith
, так как я не хочу, чтобы приложение ждало результата только для того, чтобы добавить сообщение в брокер, поэтому просто использовать task.Result
не вариант.
Task.Result
сasync-await
редко возможно. - person Paulo Morgado   schedule 16.01.2015