Deepseek, Giga, TplBlockNaming, Metrics, BlockMonitor, Metrics, QuoteGeneratorWorkerSln.slnx
https://chat.deepseek.com/share/74yf818xb08ewncn13
https://giga.chat/link/gcswsxZGaJ
https://giga.chat/link/gcsMeyTHNID:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorkerSln.slnx
------------------------------------------------------------------
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker058\QuoteGeneratorWorker058.csproj
BlockMonitor (TplBlockNaming, Metrics)
------------------------------------------------------
Channels
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker\QuoteGeneratorWorker.csproj
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker02\QuoteGeneratorWorker02.csproj
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker03\QuoteGeneratorWorker03.csproj
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker04\QuoteGeneratorWorker04.csproj
--------------------------------------------------------------------------------
TplDataFlow
Unknown Block
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker05\QuoteGeneratorWorker05.csproj
public override async Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("🛑 Инициирована остановка генератора котировок.");
// 1. Останавливаем генерацию новых котировок.
_logger.LogInformation("🛑 1. Останавливаем генерацию новых котировок.");
_generationTimer?.Change(Timeout.Infinite, 0);
// 2. Завершаем все блоки-потребители.
_logger.LogInformation("🛑 2. Завершаем все блоки-потребители");
foreach (var block in _consumerBlocks)
{
block.Complete(); // Unknown block
}
// 3. Ждём завершения всех обработчиков (ActionBlocks).
_logger.LogInformation("🛑 3. Ждём завершения всех обработчиков (ActionBlocks)");
await Task.WhenAll(_consumerBlocks.Select(b => b.Completion));
// 4. Завершаем BroadcastBlock (он уже не нужен).
_logger.LogInformation("🛑 4. Завершаем BroadcastBlock (он уже не нужен).");
_broadcastBlock.Complete();
_logger.LogInformation("🛑 5. Генератор котировок остановлен.");
}
--------------------------------------------------------------------------
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 Инициирована остановка генератора котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 1. Останавливаем генерацию новых котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем все блоки-потребители
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 3. Ждём завершения всех обработчиков (ActionBlocks)
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
ConsoleHandler: Обработана котировка: ROSN - $147.8
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
ApiHandler: Отправка котировки ROSN по цене $147.8
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
DatabaseHandler: Сохранение котировки ROSN по цене $147.8
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 4. Завершаем BroadcastBlock (он уже не нужен).
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 5. Генератор котировок остановлен.
----------------------------------------------------------------------------------
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker053\QuoteGeneratorWorker053.csproj
----------------------------------------------------------------
public override async Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("🛑 Инициирована остановка генератора котировок.");
// 1. Останавливаем генерацию новых котировок.
_logger.LogInformation("🛑 1. Останавливаем генерацию новых котировок.");
_generationTimer?.Change(Timeout.Infinite, 0);
// 2. Завершаем все блоки-потребители.
_logger.LogInformation("🛑 2. Завершаем все блоки-потребители");
foreach (var block in _consumerBlocks)
{
block.Complete();
}
// 3. Ждём завершения всех обработчиков (ActionBlocks).
_logger.LogInformation("🛑 3. Ждём завершения всех обработчиков (ActionBlocks)");
await Task.WhenAll(_consumerBlocks.Select(b => b.Completion));
// 4. Завершаем BroadcastBlock (он уже не нужен).
_logger.LogInformation("🛑 4. Завершаем BroadcastBlock (он уже не нужен).");
_broadcastBlock.Complete();
_logger.LogInformation("🛑 5. Генератор котировок остановлен.");
}
------------------------------------------------------------------------------------
Видно ActionBlock - какой именно не видно - неизвестный
-------------------------------------------------------------------------------------
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 Инициирована остановка генератора котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 1. Останавливаем генерацию новых котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем все блоки-потребители
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: ActionBlock`1
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: ActionBlock`1
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: ActionBlock`1
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 3. Ждём завершения всех обработчиков (ActionBlocks)
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 4. Завершаем BroadcastBlock (он уже не нужен).
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 5. Генератор котировок остановлен.
--------------------------------------------------------------------------
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker055\QuoteGeneratorWorker055.csproj
Видно Кортеж
_logger.LogInformation("🛑 2. Завершаем блок-потребитель: {BlockName}", name);
---------------------------------------------------------------------------
public override async Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("🛑 Инициирована остановка генератора котировок.");
// 1. Останавливаем генерацию новых котировок.
_logger.LogInformation("🛑 1. Останавливаем генерацию новых котировок.");
_generationTimer?.Change(Timeout.Infinite, 0);
// 2. Завершаем все блоки-потребители с выводом их имён.
_logger.LogInformation("🛑 2. Завершаем все блоки-потребители.");
foreach (var (block, name) in _consumerBlocks)
{
_logger.LogInformation("🛑 2. Завершаем блок-потребитель: {BlockName}", name);
block.Complete();
}
// 3. Ждём завершения всех обработчиков.
_logger.LogInformation("🛑 3. Ожидаем завершения всех обработчиков (ActionBlocks).");
await Task.WhenAll(_consumerBlocks.Select(b => b.Block.Completion));
// 4. Завершаем BroadcastBlock.
_logger.LogInformation("🛑 4. Завершаем {BlockName}.", _broadcastBlockName);
_broadcastBlock.Complete();
_logger.LogInformation("🛑 5. Генератор котировок остановлен.");
}
-----------------
nfo: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 Инициирована остановка генератора котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 1. Останавливаем генерацию новых котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем все блоки-потребители.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: ApiHandler
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: DatabaseHandler
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: ConsoleHandler
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 3. Ожидаем завершения всех обработчиков (ActionBlocks).
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 4. Завершаем BroadcastBlock.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 5. Генератор котировок остановлен.
---------------------------------------------------------------------------------------
D:\Projects\VS02\2606\Trading\Giga\QuoteGeneratorWorkerSln\QuoteGeneratorWorker058\QuoteGeneratorWorker058.csproj
BlockMonitor (Naming, Metrics)
----------------------------------------------------------------------------------------
public override async Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("🛑 Инициирована остановка генератора котировок.");
// 1. Останавливаем таймер
_logger.LogInformation("🛑 1. Останавливаем генерацию новых котировок.");
_generationTimer?.Change(Timeout.Infinite, 0);
// 2. Завершаем все блоки-потребители
_logger.LogInformation("🛑 2. Завершаем все блоки-потребители.");
foreach (var monitor in _consumerMonitors)
{
_logger.LogInformation("🛑 2. Завершаем блок-потребитель: {BlockName}", monitor.Name);
monitor.Block.Complete();
}
// 3. Ждём завершения всех потребителей
_logger.LogInformation("🛑 3. Ожидаем завершения всех обработчиков.");
await Task.WhenAll(_consumerMonitors.Select(m => m.Block.Completion));
// 4. Завершаем BroadcastBlock
_logger.LogInformation("🛑 4. Завершаем {BlockName}.", _broadcastMonitor.Name);
_broadcastBlock.Complete();
// 5. Выводим статистику по всем блокам
_logger.LogInformation("📊 Статистика работы блоков:");
LogStatistics(_broadcastMonitor);
foreach (var monitor in _consumerMonitors)
{
LogStatistics(monitor);
}
_logger.LogInformation("🛑 5. Генератор котировок остановлен.");
}
----------------------------------------------------------------------------------------
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 Инициирована остановка генератора котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 1. Останавливаем генерацию новых котировок.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем все блоки-потребители.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: ApiHandler
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: DatabaseHandler
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 2. Завершаем блок-потребитель: ConsoleHandler
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 3. Ожидаем завершения всех обработчиков.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 4. Завершаем BroadcastBlock.
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
📊 Статистика работы блоков:
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
Блок BroadcastBlock: Принято = 6, Обработано = 0, Ошибок = 0, Время работы = 00:00:11.5151087
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
Блок ApiHandler: Принято = 6, Обработано = 6, Ошибок = 0, Время работы = 00:00:11.5157941
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
Блок DatabaseHandler: Принято = 6, Обработано = 6, Ошибок = 0, Время работы = 00:00:11.5138970
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
Блок ConsoleHandler: Принято = 6, Обработано = 6, Ошибок = 0, Время работы = 00:00:11.5128663
info: QuoteGeneratorWorker.Services.QuoteGeneratorService[0]
🛑 5. Генератор котировок остановлен.
------------------------------------------------------------
Мы видим Naming, Metrics