예제 #1
0
        protected override void ExecuteCore()
        {
            ClientState.Current.Messages.Errors.Clear();

            if (ChannelsManager.Channels.Count == 0)
            {
                return;
            }

            var channels = ListOrSingle <ChannelInstance> .Get(channel, ChannelsManager.Channels);

            var gate = new ConcurrencyGate(2);

            foreach (var channelInstance in channels.Where(c => !c.Configuration.IsConnected))
            {
                var inputChannel = channelInstance.InputChannel;
                var config       = channelInstance.Configuration;

                var foldersTask = new ReceiveFoldersTask(channelInstance.Configuration, inputChannel.Clone());

                foldersTask.FinishedSuccess += ((sender, e) =>
                                                ReceiveFoldersTask_FinishedSuccess((ReceiveFoldersTask)sender, config, inputChannel));

                gate.Add(foldersTask);
            }

            // Wait for all receive tasks to complete, keeping the queue filled for the ReceiveTask.
            // This prevents any new receive task from getting enqueued.
            gate.Execute();

            // Clean up connection scavangers
            ConnectionPoolScavenger.Shutdown();

            GC.Collect(GC.MaxGeneration);
        }
예제 #2
0
 void MainForm_FormClosing(object sender, FormClosingEventArgs e)
 {
     ConnectionPoolScavenger.Shutdown();
 }
예제 #3
0
 public static void Connections()
 {
     ConnectionPoolScavenger.Shutdown();
 }