queueClient.SendAsyn c (сообщение) не отправляет сообщения последовательно - PullRequest
0 голосов
/ 30 января 2020

Приведенная ниже программа отправляет сообщение в очередь, однако в большинстве случаев сообщение не отправляется.

Я использую метод Sender () (как показано ниже) в моей библиотеке классов. Это вызывается из облачной службы (рабочая роль). Помогите, пожалуйста, выяснить, почему сообщение не всегда отправлено, и исправить код.

{
    static void Main(string[] args)
    {
        Sender();
        Console.ReadKey();
    }

    private static void Sender()
    {
        var ConnectionString = "<<Connectionstring>>";
        var QueueName = "samplequeue";

        var queueClient = new QueueClient(ConnectionString, QueueName);

        try
        {
            for (var i = 0; i < 5; i++)
            {
                // Create a new message to send to the queue
                string messageBody = $"Message {i}";
                var message = new Message(Encoding.UTF8.GetBytes(messageBody));


                // Write the body of the message to the console
                Console.WriteLine($"Sending message: {messageBody}");

                // Send the message to the queue
                queueClient.SendAsync(message);
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine("Message queue failed\n" + ex.Message);
        }
        finally
        {
            Console.WriteLine("Message queued");
        }
    }
}

Ответы [ 2 ]

1 голос
/ 30 января 2020

Я считаю, что проблема в том, что вы не awaiting выполняете async method.

queueClient.SendAsync(message)

Один из вариантов - изменить вышеуказанный вызов и дождаться завершения выполнения

await queueClient.SendAsync(message);

В этом случае вам нужно будет также выполнить Sender метод async, а затем дождаться его завершения в вашем методе Main.

Другой вариант будет используйте Sync версию метода:

queueClient.Send(message); 
0 голосов
/ 30 января 2020

Вы должны дождаться завершения вызова. В противном случае оно будет выполняться в фоновом режиме.

Это означает, что Сообщение 4 может завершиться после Сообщения 3 (поскольку у вас есть все oop) или что оно вообще не завершится, если ваше консольное приложение завершит работу до того, как оно получит шанс.

Поскольку вы используете синхронное приложение, вы можете вызвать Send() следующим образом:

queueClient.SendAsync(message).GetAwaiter().GetResult();

См. .Result vs .GetAwaiter (). GetResult ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...