Ejemplo n.º 1
0
 public Publishing_channel(IConnection Connection, TimeSpan?Idle_timeout, string Topic_name, Dictionary <string, Publishing_channel> publishing_channels, Publishing_exception_type e)
 {
     AMQP_channel = Connection.CreateModel();
     if (Idle_timeout != null)
     {
         Task.Run(async() => Idle_sensor(Idle_timeout.Value, Topic_name, publishing_channels, e));
     }
 }
Ejemplo n.º 2
0
            public async Task Idle_sensor(TimeSpan Idle_timeout, string Topic_name, Dictionary <string, Publishing_channel> publishing_channels, Publishing_exception_type e)
            {
                var   Async_delay = Task.Delay(Idle_timeout);
                await Async_delay;

                try {
                    if (Async_delay.Status != TaskStatus.RanToCompletion)
                    {
                        throw new Exception("await Task.Delay for Idle_timeout");
                    }
                    if (Published_flag == false)
                    {
                        lock (publishing_channels) {
                            if (Published_flag == false)
                            {
                                AMQP_channel.Close();
                                publishing_channels.Remove(Topic_name);                         // Takes itself out!
                                return;
                            }
                        }
                    }
                    Published_flag = false;
                    Task.Run(async() => Idle_sensor(Idle_timeout, Topic_name, publishing_channels, e));
                } catch (Exception exception) {
                    lock (e) {
                        e.AddToExceptionText(exception.Message);
                    }
                }
            }