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)); } }
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); } } }