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); }
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); }