Написал вот так:
private void ProcessPlazaStream(PlazaRecord record, PlazaColumn isinIdColumn, bool ignoreIfNotExist, Action<Security> action)
{
var isinId = record.Get<int>(isinIdColumn);
ProcessEvents(() => ProcessSecurityAction(isinId, action, ignoreIfNotExist));
}
private void ProcessSecurityAction(int isinId, Action<Security> action, bool ignoreIfNotExist)
{
if (isinId==0)
throw new ArgumentNullException("isinId");
if (action == null)
throw new ArgumentNullException("action");
Security security = _isinIdSecurities.TryGetValue<int, Security>(isinId);
if (security == null)
{
if (!ignoreIfNotExist)
{
//_suspendedSecurityEvents.Add(isinId, action); что это?
}
}
else
action(security);
}
private void OnSessionContentsDerivativeStreamInserted(PlazaRecord record, PlazaSessionContentsDerivativeColumns metadata, Action<Security> initHandler, Action<Security> updateHandler)
{
ProcessEvents(() =>
{
var isinId = record.Get<int>(metadata.IsinId);
var secCode = record.Get<string>(metadata.ShortIsin);
var sec = GetSecurity(CreateSecurityId(secCode, "RTS"), security =>
{
_isinIdSecurities.TryAdd(isinId, security);
InitSecurityInfo(security, record, metadata);
security.Code = secCode;
initHandler(security);
UpdateSecurityInfo(security, record, metadata);
updateHandler(security);
});
});
}
До клиринга все вроде норм работало, на клиринге стали вылетать ошибки из PlazaDepthBuilder.FlushChanges, строка:
var newDepth = dict[oldDepth.Security].PendingDepth;
Говорит что в dict нет таких-то ключей, ключем тут является security. Есть идеи?)