private void SimulateAssetValueChanges() { var notificationSubscriptions = SubscriptionsManager.Subscriptions; var assets = _exchangeRatesProvider.GetAssets().GetAwaiter().GetResult().ToArray(); var rnd = new Random(); var changedAssetsAmount = rnd.Next(assets.Length); for (var i = 0; i < changedAssetsAmount; i++) { var randomAssetInd = rnd.Next(assets.Length); var randomAsset = assets[randomAssetInd]; var assetValue = _exchangeRatesProvider.GetAssetValue(randomAsset).GetAwaiter().GetResult(); var matchedConditions = notificationSubscriptions.Where(ns => ns.Predicate(assetValue) && ns.Asset.Equals(randomAsset, StringComparison.InvariantCultureIgnoreCase)) .ToArray(); foreach (var matchedCondition in matchedConditions) { AssetValueChangedEvent?.Invoke(this, new AssetValueChangedEventArgs { Asset = matchedCondition.Asset, ChatId = matchedCondition.ChatId, Value = assetValue }); } foreach (var cond in matchedConditions) { _subscriptionsManager.Unsubscribe(cond.Asset, cond.ChatId, cond.Predicate); } } }