• Что происходит с BrokeredMessage после await вызова метода доступа к БД?

    @tselofun
    Использование метода OnMessageAsync также решит такую проблему. В вашей ситуации сигнатура обработчика async void Callback(...) . Это означает, что при первом встретившемся в нем await создается новый поток, в то время как вызывающий поток (поток в котором выполняется метод OnMessage) продолжит свое выполнение, не дожидаясь выполнения обработчика. Судя по поведению, в методе OnMessage используется конструкция using для объекта BrockeredMessage, в следствии чего он "диспознится" в другом потоке, нежели где вызывается receivedMessage.Complete() и сделает это, видимо, раньше. В тоже время OnMessageAsync принимает в качестве аргумента обработчик с сигнатурой Func, что позволяет вызывать его в асинхронном стиле с помощью ключевого слова await (опять же закулисами метода OnMessageAsync ). В результате метод OnMessageAsync "дожидается" выполнения обработчика, чтобы потом уничтожить объект BrockeredMessage.
    Ответ написан
    Комментировать