コード例 #1
0
        private Task DetectSuspiciousTrades(CancellationToken token)
        {
            Console.WriteLine("Monitoring suspicious trade activity");
            Console.WriteLine();

            while (!token.IsCancellationRequested)
            {
                if (QueuedTrades.TryDequeue(out var newTrade))
                {
                    var flaggedTrades = ProcessedTrades
                                        .Where(processedTrade => _validator.IsSuspicious(processedTrade, newTrade))
                                        .ToList();

                    flaggedTrades.ForEach(flaggedTrade =>
                    {
                        var flagged = new FlaggedTrades()
                        {
                            Match = flaggedTrade,
                            Trade = newTrade
                        };
                        FlaggedTrades.Add(flagged);
                        _logger.Log(flagged);
                    });

                    ProcessedTrades.Enqueue(newTrade);
                }
            }

            return(Task.CompletedTask);
        }
コード例 #2
0
        private Task RetentionPolicy(CancellationToken token)
        {
            Console.WriteLine("Applying trades retention policy");
            Console.WriteLine();

            while (!token.IsCancellationRequested)
            {
                if (ProcessedTrades.TryPeek(out var trade))
                {
                    var latestTrade = ProcessedTrades.Last();
                    if (latestTrade.AsAt.Subtract(trade.AsAt).TotalSeconds > _settings.Get().RetentionPeriod)
                    {
                        Console.WriteLine($"Throwing away deal #{trade.Id}");
                        ProcessedTrades.TryDequeue(out _);
                    }
                }
            }

            return(Task.CompletedTask);
        }