Ваша переменная maxsize
не синхронизируется между потоками, поэтому существует проблема с потоками. Кроме того, ConcurrentQueue
уже имеет функцию ElementAtOrDefault
, которая автоматически возвращает null
, если индекс не существует.
Я бы обновился, чтобы унаследовать от ConcurrentQueue
сам.
public class FixedSizeConcurrentQueue<T> : ConcurrentQueue<T>
{
public int MaxSize { get; }
public FixedSizeConcurrentQueue(int maxSize)
{
MaxSize = maxSize;
}
public new void Enqueue(T obj)
{
base.Enqueue(obj);
while (base.Count > MaxSize)
{
T outObj;
base.TryDequeue(out outObj);
}
}
public T GetElementAt(int index)
{
return base.ElementAtOrDefault(index);;
}
}
Можно ли использовать Бросок и fn_varbintohexstr?
SELECT master.dbo.fn_varbintohexstr(CAST(SomeStringColumn AS varbinary))
FROM SomeTable
Я не уверен, есть ли у Вас та функция в Вашей системе баз данных, это находится в MS-SQL.
Я просто попробовал его в своем SQL-сервере MMC на одной из моих таблиц:
SELECT master.dbo.fn_varbintohexstr(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM Customer
Это работало как ожидалось. возможно то, что я знаю как ведущее устройство dbo.fn_varbintohexstr на MS-SQL, могло бы быть подобно шестнадцатеричному числу informix () функция, таким образом, возможно попробуйте:
SELECT hex(CAST(Addr1 AS VARBINARY)) AS Expr1
FROM Customer
Если для Вас возможно сделать это в клиенте базы данных в коде, это могло бы быть легче.
Иначе ошибка, вероятно, означает, что созданный в шестнадцатеричной функции не может работать с Вашими значениями, как Вы ожидаете. Я проверил бы входное значение дважды, обрезается и в формате сначала, это могло бы быть настолько просто. Затем я консультировался бы с документацией базы данных, которая описывает шестнадцатеричную функцию, и посмотрите то, что ее ожидаемый вход был бы и сравнил бы это с некоторыми Вашими значениями и узнал бы то, что различие и как изменить Ваши значения для соответствия тому из ожидаемого входа.
Простой поиск Google "informix шестнадцатеричная функция" поднял первую страницу результатов с предложением: "Должно быть литеральное целое число или некоторое другое выражение, которое возвращает целое число". Если Ваш тип данных является строкой, сначала преобразуйте строку в целое число. Это похоже на первый взгляд, что Вы делаете что-то с функцией броска (я не уверен в этом).
select hex(cast SomeStringColumn as int)) from SomeTable