Example #1
0
        public async Task SimplePublish(IFastQueueClient client, string topicName)
        {
            await using var publisher = await client.CreatePublisher(topicName, ack =>
            {
                Console.WriteLine($"(simple) Last persisted SequenceNumber: {ack}");
            });

            for (int i = 0; i < 1000; i++)
            {
                var message        = messageGenerator.CreateMessage().Serialize();
                var sequenceNumber = await publisher.Publish(message);
            }
        }
Example #2
0
        public async Task PublishAndWaitUntilAllMessagesAreAcknowledged(IFastQueueClient client, string topicName)
        {
            // in the future there will be an extensions for Publisher to do this in a simpler way
            bool waitingForAck = false;
            long lastPublishedSequenceNumber    = 0;
            long lastAcknowledgedSequenceNumber = 0;
            TaskCompletionSource <int> tcs      = null;

            await using var publisher = await client.CreatePublisher(topicName, ack =>
            {
                Console.WriteLine($"(waiting example) Last persisted SequenceNumber: {ack}");

                lastAcknowledgedSequenceNumber = ack;
                if (waitingForAck)
                {
                    if (lastPublishedSequenceNumber == ack)
                    {
                        tcs.TrySetResult(0);
                    }
                }
            });

            for (int i = 0; i < 1000; i++)
            {
                var message = messageGenerator.CreateMessage().Serialize();
                lastPublishedSequenceNumber = await publisher.Publish(message);
            }

            tcs           = new TaskCompletionSource <int>();
            waitingForAck = true;
            if (lastAcknowledgedSequenceNumber != lastPublishedSequenceNumber)
            {
                await tcs.Task;
            }

            Console.WriteLine($"(waiting example) All messages acknowledged");
        }