BitSharp.Core.Workers.StatsWorker.WorkAction C# (CSharp) Метод

WorkAction() защищенный Метод

protected WorkAction ( ) : System.Threading.Tasks.Task
Результат System.Threading.Tasks.Task
        protected override Task WorkAction()
        {
            var currentChain = coreDaemon.UnconfirmedTxesChain;
            if (currentChain == null)
                return Task.CompletedTask;

            // init stats logging at current chain height on first run
            if (unconfirmedTxesLogHeight == -1)
                unconfirmedTxesLogHeight = currentChain.Height;

            lock (confirmedBlockStatsByHeight)
            {
                // log confirmed txes stats at each height, up to the re-org buffer allowance
                while (unconfirmedTxesLogHeight < currentChain.Height - REORG_BUFFER)
                {
                    var nextLogHeight = unconfirmedTxesLogHeight + 1;

                    ConfirmedBlockStats confirmedBlockStats;
                    if (confirmedBlockStatsByHeight.TryGetValue(nextLogHeight, out confirmedBlockStats))
                    {
                        var chainedHeader = confirmedBlockStats.ChainedHeader;
                        var confirmedTxesStats = confirmedBlockStats.ConfirmedTxesStats;
                        var confirmTime = confirmedBlockStats.ConfirmTime;

                        // don't log stats on initial sync, only log blocks that have been processed within an hour of their header time
                        var blockTime = currentChain.Blocks[nextLogHeight].Time;
                        if (confirmTime - blockTime <= TimeSpan.FromHours(1))
                        {
                            // log confirmed txes stats
                            var statsString = new StringBuilder();
                            statsString.AppendLine($"[StatsWorker] Block {chainedHeader.Height}, {chainedHeader.Hash} confirmed at: {confirmTime}");

                            var blockJsonStats = JsonConvert.SerializeObject(
                                new
                                {
                                    blockHash = chainedHeader.Hash.ToString(),
                                    blockHeight = chainedHeader.Height,
                                    confirmTimeUnixMilliseconds = confirmTime.ToUnixTimeMilliseconds(),
                                    txes =
                                        from confirmedTxStats in confirmedTxesStats
                                        select new
                                        {
                                            hash = confirmedTxStats.Hash.ToString(),
                                            confirmationMilliseconds = (int)confirmedTxStats.ConfirmationTimeSpan.TotalMilliseconds,
                                            fee = confirmedTxStats.Fee,
                                            txByteSize = confirmedTxStats.TxByteSize
                                        }
                                });
                            statsString.AppendLine(blockJsonStats);

                            //logger.Info(statsString);
                        }

                        confirmedBlockStatsByHeight.Remove(nextLogHeight);
                    }
                    else
                    {
                        logger.Warn($"[StatsWorker] Missing block confirmation stats at height {nextLogHeight}");
                    }

                    unconfirmedTxesLogHeight = nextLogHeight;
                }
            }

            return Task.CompletedTask;
        }