コード例 #1
0
        /// <summary>
        /// Execution of a service
        /// </summary>
        /// <param name="cancellationToken">Cancellation</param>
        /// <returns></returns>
        protected override async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            Log.Info("PGenesisWorker.Execute!");

            await ParallelHelper.Run(() =>
            {
                string defaultDbName = _config["PgDefaultDb"];
                Log.Info($"Default DB name: {defaultDbName}");
                string connString       = GetConnectionString(defaultDbName);
                List <string> databases = new List <string>();

                using (PgSqlDbConnect connect = new PgSqlDbConnect(connString))
                {
                    connect.Open();
                    using (PgSqlDataReader reader = connect.GetDataReader("SELECT datname FROM pg_database WHERE datistemplate = false AND datname != 'postgres';"))
                    {
                        while (reader.UnderlyingReader.Read())
                        {
                            databases.Add(reader.ReadString("datname"));
                        }
                    }
                }

                List <Task> allTasks = new List <Task>();
                foreach (string fDbName in databases)
                {
                    PGenesisListener fListener = new PGenesisListener(_config, fDbName, GetConnectionString(fDbName));
                    Task fTask = fListener.ListenDb(cancellationToken);
                    allTasks.Add(fTask);
                }


                while (!cancellationToken.IsCancellationRequested)
                {
                    Task.WaitAll(allTasks.ToArray(), 100);
                }

                Log.Info("PGenesisWorker.Execute finished!");
            });
        }