title: How to stop Azure Message Session Handler from timing out when listening for messages?
body: <p>Below is my synchronous implementation of the IMessageSessionHandler interface. One problem I have is that when there are no messages in the queue the InitializeReceiverSync method will repeatedly run until the web job ungracefully times out in Azure, resulting in a failure. On the other hand if there are messages in the queue to be read, once they are read, the session closes and the program exits.</p>
  
  <p>What is the best way to exit the method if there are no messages in the queue? </p>
  
  <pre><code>    public void ReceiveMessagesFromAzure()
      {
          int i = 0;
          while (i &lt; 4)
          {
              var QueueName = ConfigurationManager.AppSettings["QueueName"];
              var connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"];
              CancellationTokenSource cts = new CancellationTokenSource();
              InitializeReceiverSync(connectionString, QueueName, cts.Token);
              i++;
          }
  
      }
      public void InitializeReceiverSync(string connectionString, string queueName, CancellationToken ct)
      {
          var receiverFactory = MessagingFactory.CreateFromConnectionString(connectionString);
          ct.Register(() =&gt; receiverFactory.Close());
  
          var client = receiverFactory.CreateQueueClient(queueName, ReceiveMode.PeekLock);
  
          client.RegisterSessionHandler(
              typeof(SessionHandler),
              new SessionHandlerOptions
              {
                  MessageWaitTimeout = TimeSpan.FromSeconds(5),
                  MaxConcurrentSessions = 1,
                  AutoComplete = false
              });
  
      }
  
      class SessionHandler : IMessageSessionHandler
      {
  
          AzureRepository ar = new AzureRepository([queueName], [connectionString]);
          void IMessageSessionHandler.OnMessage(MessageSession session, BrokeredMessage message)
          {
              ar.ProcessMessage(message);
          }
  
          void IMessageSessionHandler.OnCloseSession(MessageSession session)
          {
              Console.WriteLine("Session closed");
              Environment.Exit(0);
          }
  
          void IMessageSessionHandler.OnSessionLost(Exception exception)
          {
              Console.WriteLine(exception.Message);
              Console.WriteLine("Press any key to exit");
          }
      }
  </code></pre>