Обновить

Комментарии 2

Попытался использовать у себя в проекте, но получилось неприятно.

using var list = PooledList<T>.Create(75);
var cToken = new ColdToken();
list.ToList(cToken);

Выбросит исключение: System.InvalidOperationException: "ColdToken is required for materialization.". Выбрасывается оно, т.к. в ColdToken нужно передать nonce != 0, но конструктор internal, поэтому сделать это невозможно. Без ColdToken невозможно вызвать .Tolist().

Попытка не пытка, но жалко потратить час для адаптации в коде, а теперь вырезать пол часа обратно.
PS документации нет, кроме как эта статья

Спасибо за отзыв. Для материализации нужно использовать ColdToken, который создаётся через Cold.Enter():

using var cold = Cold.Enter();
var result = list.ToList(cold.Token);

Изначально это было сделано намеренно, чтобы операции, гарантированно выделяющие память (ToList(), ToArray() и т.п.), были явно отделены от горячего кода, где библиотека старается избегать лишних аллокаций и GC-пауз. Согласен, что без документации этот механизм выглядит неочевидно, поэтому в следующих версиях будет добавлено более подробное описание концепции Cold/Hot API и улучшены сообщения об ошибках.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации