public async void Dispose() { await _subscriptionClient.CloseAsync(); }
public async Task Run(string connectionString) { // Start senders and receivers: Console.WriteLine("\nLaunching senders and receivers..."); var topicClient = new TopicClient(connectionString, TopicName); Console.WriteLine("Preparing to send messages to {0}...", topicClient.Path); // Send messages to queue: Console.WriteLine("Sending messages to topic {0}", topicClient.Path); var rand = new Random(); for (var i = 0; i < 100; ++i) { var msg = new Message() { TimeToLive = TimeSpan.FromMinutes(2), UserProperties = { { "Priority", rand.Next(1, 4) } } }; await topicClient.SendAsync(msg); this.OutputMessageInfo("Sent: ", msg); } Console.WriteLine(); // All messages sent Console.WriteLine("\nSender complete."); // start receive Console.WriteLine("Receiving messages by priority ..."); var subClient1 = new Microsoft.Azure.ServiceBus.SubscriptionClient(connectionString, TopicName, "Priority1Subscription", ReceiveMode.PeekLock); var subClient2 = new Microsoft.Azure.ServiceBus.SubscriptionClient(connectionString, TopicName, "Priority2Subscription", ReceiveMode.PeekLock); var subClient3 = new Microsoft.Azure.ServiceBus.SubscriptionClient(connectionString, TopicName, "PriorityGreaterThan2Subscription", ReceiveMode.PeekLock); Func <SubscriptionClient, Message, CancellationToken, Task> callback = (c, message, ct) => { this.OutputMessageInfo("Received: ", message); return(Task.CompletedTask); }; subClient1.RegisterMessageHandler((m, c) => callback(subClient1, m, c), new MessageHandlerOptions(LogMessageHandlerException) { MaxConcurrentCalls = 10, AutoComplete = true }); subClient2.RegisterMessageHandler((m, c) => callback(subClient1, m, c), new MessageHandlerOptions(LogMessageHandlerException) { MaxConcurrentCalls = 5, AutoComplete = true }); subClient3.RegisterMessageHandler((m, c) => callback(subClient1, m, c), new MessageHandlerOptions(LogMessageHandlerException) { MaxConcurrentCalls = 1, AutoComplete = true }); Task.WaitAny( Task.Run(() => Console.ReadKey()), Task.Delay(TimeSpan.FromSeconds(10))); await Task.WhenAll(subClient1.CloseAsync(), subClient2.CloseAsync(), subClient3.CloseAsync()); }