reckfellENGINE

WorkerThreadPool

Обычные и индексированные задачи общего пула с явным сбором.

На этой странице
class WorkerThreadPoolReckfellSharp

WorkerThreadPool использует общий pool движка. AddTask вызывает Callable без аргументов; AddGroupTask передаёт каждому вызову индекс. Результаты и ошибки храните в собственных данных, а не в возвращаемом ID.

Статус завершения не собирает задачу. Один владелец должен вызвать соответствующий Wait один раз, затем перестать использовать ID. Ожидание незавершённой работы может остановить кадр; опрашивайте статус между кадрами и исключите циклы зависимостей.

Для group используйте tasksNeeded=-1 либо положительное число. Ноль при непустой группе в текущей реализации может оставить её незавершённой; ветвь разобрана по исходникам без запуска зависания. Нулевая elements-группа завершена сразу, но тоже требует сбора.

Worker не получает обычный доступ к активному EntityTree. Не меняйте размер общего массива во время обработки и не путайте GetCallerTaskId() с ID группы: в group callback индивидуальный task ID равен −1.

Полный пример пакетной обработки, потокобезопасность. Windows headless-проверки подтверждают lifecycle, индексированные результаты и контекст IDs; ускорение, порядок приоритетов, nested waits и неверные IDs не подтверждены.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Свойства1

SingletonСвойство
# Singleton
C#
public static WorkerThreadPoolInstance Singleton { get; }

Заимствованный wrapper общего пула движка; повтор возвращает cached wrapper. Не Dispose/Free Singleton и не пытайтесь завершать весь pool из игрового job. Для задач используйте статические методы и собирайте только собственные task/group IDs.

Методы9

AddGroupTasklong
# AddGroupTask
C#
public static long AddGroupTask(Callable action, int elements, int tasksNeeded = -1, bool highPriority = false, string description = "");

Распределяет elements вызовов Callable, каждый с индексом 0…elements−1. tasksNeeded задаёт число рабочих задач, а не число элементов и не гарантированное число одновременно работающих CPU-ядер; −1 выбирает по pool. Не передавайте 0 при elements>0: текущая реализация не создаёт workers и может оставить группу незавершённой; это проверено по исходникам, без запуска зависания. elements=0 создаёт завершённую пустую группу, которую всё равно нужно собрать. Отрицательное elements недопустимо. Результаты складывайте в заранее выделенные независимые слоты; не меняйте размер входа/выхода во время работы. Не предполагается порядок индексов. Завершение подтвердите статусом и вызовите WaitForGroupTaskCompletion один раз.

Параметры
ИмяТипПо умолчанию
actionCallable—
elementsint—
tasksNeededint-1
highPriorityboolfalse
descriptionstring""
action

Живой Callable: без аргументов для AddTask, с int-индексом для AddGroupTask. Не даёт автоматического доступа к активному дереву.

elements

Неотрицательное число element-вызовов; 0 не вызывает action, но требует сбора созданной группы.

tasksNeeded

−1 для автоматического выбора или разумное положительное число workers; не 0 при непустой группе и не произвольное огромное значение.

highPriority

Предпочтение очереди pool; не OS realtime priority и не гарантия порядка/ускорения.

description

Диагностическая метка; не идентификатор задачи, не имя файла и не команда.

Возвращает long

Group ID для статуса и одного сбора либо −1 при отклонённом elements.

AddTasklong
# AddTask
C#
public static long AddTask(Callable action, bool highPriority = false, string description = "");

Ставит один Callable без аргументов в общий pool. Возвращается task ID, не результат callback; возвращаемое callback-значение pool не предоставляет. Публикуйте собственный результат через согласованное хранилище. Удерживайте цель Callable и входные данные до завершения. После проверки IsTaskCompleted выполните WaitForTaskCompletion ровно один раз. Получение ID не доказывает успешную работу или корректный Callable; сами проверьте вход. highPriority не гарантирует порядок/ускорение. Для отмены и ошибок реализуйте явный протокол приложения.

Параметры
ИмяТипПо умолчанию
actionCallable—
highPriorityboolfalse
descriptionstring""
action

Живой Callable: без аргументов для AddTask, с int-индексом для AddGroupTask. Не даёт автоматического доступа к активному дереву.

highPriority

Предпочтение очереди pool; не OS realtime priority и не гарантия порядка/ускорения.

description

Диагностическая метка; не идентификатор задачи, не имя файла и не команда.

Возвращает long

Task ID для статуса и одного сбора; не callback-результат.

GetCallerGroupIdlong
# GetCallerGroupId
C#
public static long GetCallerGroupId();

Возвращает ID группы текущего group worker. На главном потоке, вне pool или в обычной AddTask-задаче возвращает −1. Не является индексом элемента: индекс приходит аргументом callback. У всех элементов одной группы ID одинаков.

Возвращает long

ID текущей группы либо −1 вне group callback.

GetCallerTaskIdlong
# GetCallerTaskId
C#
public static long GetCallerTaskId();

Возвращает ID текущей обычной pool-задачи. Вне pool-контекста — −1. У workers групповой задачи индивидуальный публичный task ID не назначается и результат также −1: для группы используйте GetCallerGroupId. Это не OS thread ID или ID главного потока. Не собирайте задачу из неё самой.

Возвращает long

ID обычной текущей задачи либо −1, в том числе в group worker.

GetGroupProcessedElementCountuint
# GetGroupProcessedElementCount
C#
public static uint GetGroupProcessedElementCount(long groupId);

Число вызовов элементов, уже завершившихся в группе; не число назначенных workers и не число начатых вызовов. Прибавляется после возврата callback. Даже count==elements не заменяет IsGroupTaskCompleted и обязательный WaitForGroupTaskCompletion. Читайте только до сбора группы; неверный/уже собранный ID даёт диагностику и 0, который не доказывает пустую группу.

Параметры
ИмяТипПо умолчанию
groupIdlong—
groupId

Ещё не собранный ID группы, которым владеет ваш код; не индекс элемента или обычный task ID.

Возвращает uint

Число вернувшихся element callbacks; 0 также возможно для неверного ID с диагностикой.

IsGroupTaskCompletedbool
# IsGroupTaskCompleted
C#
public static bool IsGroupTaskCompleted(long groupId);

Проверяет завершение группы без её сбора. True не освобождает registry-запись: после него нужен один WaitForGroupTaskCompletion. Между кадрами опрашивайте статус, не блокируйте главный поток busy loop. После сбора перестаньте использовать ID. False при неверном ID сопровождается диагностикой и не означает работающую группу.

Параметры
ИмяТипПо умолчанию
groupIdlong—
groupId

Ещё не собранный ID группы, которым владеет ваш код; не индекс элемента или обычный task ID.

Возвращает bool

True при завершении; не подтверждение выполненного сбора.

IsTaskCompletedbool
# IsTaskCompleted
C#
public static bool IsTaskCompleted(long taskId);

Проверяет, вернулся ли обычный task callback. Не извлекает пользовательский результат и не освобождает задачу. После true выполните WaitForTaskCompletion и проверьте Error. После успешного сбора ID больше не используйте. Не передавайте сюда group ID; неверный ID даёт false и native-диагностику.

Параметры
ИмяТипПо умолчанию
taskIdlong—
taskId

Ещё не собранный ID обычной задачи, которым владеет ваш код; не ID группы/потока.

Возвращает bool

True после возврата callback; не пользовательский результат.

WaitForGroupTaskCompletionvoid
# WaitForGroupTaskCompletion
C#
public static void WaitForGroupTaskCompletion(long groupId);

Ждёт группу и собирает её запись. Блокирует вызывающий поток при незавершённой работе; главный поток на это время не обрабатывает обычные кадры. Назначьте одного владельца сбора, вызовите один раз и забудьте ID. Нельзя ждать группу из callback этой же группы или удерживая нужные ей блокировки: возможен deadlock. Не возвращает результаты/ошибки отдельных элементов; их хранит приложение. Нет timeout/отмены; невалидный ID диагностируется.

Параметры
ИмяТипПо умолчанию
groupIdlong—
groupId

Ещё не собранный ID группы, которым владеет ваш код; не индекс элемента или обычный task ID.

WaitForTaskCompletionError
# WaitForTaskCompletion
C#
public static Error WaitForTaskCompletion(long taskId);

Ждёт обычную задачу и собирает её, возвращая Error ожидания, не callback-результат. При Ok перестаньте использовать ID. Незавершённую задачу нельзя ждать из самой себя; pool worker при попытке ждать незавершённую задачу с ID не новее собственной может получить Busy. Busy не означает успешный сбор. Неверный ID даёт InvalidParameter. Внутреннее предотвращение части deadlock не делает произвольные циклы зависимостей безопасными; не удерживайте нужные worker locks и не ждите main-thread действий из заблокированного main thread. Ошибочные nested waits здесь только source-reviewed.

Параметры
ИмяТипПо умолчанию
taskIdlong—
taskId

Ещё не собранный ID обычной задачи, которым владеет ваш код; не ID группы/потока.

Возвращает Error

Ok после сбора, InvalidParameter для неверного ID, Busy при запрещённом вложенном ожидании.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.