ReckfellThread
Запуск worker, результат и обязательный join.
ReckfellThread выполняет Callable отдельно от главного потока. IsAlive показывает работу callback, а IsStarted остаётся true до WaitToFinish, даже после возврата результата. Удерживайте поток до join; Dispose не заменяет завершение.
Схема остановки: согласованно запросить выход → разбудить ожидающего worker → дать ему выйти → WaitToFinish() → освободить объекты синхронизации. Не делайте join, удерживая нужный worker mutex.
Поток не делает активную иерархию Entity и общие Resource безопасными. Отключение проверок не исправляет доступ. Работа с потоками. Проверены Windows headless lifecycle и синхронизация; приоритеты, стресс, отключение проверок и перенос исключений не подтверждены.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
ReckfellThreadКонструктор
public ReckfellThread();Создаёт незапущенный поток движка. Это не System.Threading.Thread и не Task. Удерживайте объект и цель Callable до завершения; после успешного Start обязательно выполните WaitToFinish до Dispose/повторного запуска. Уничтожение wrapper не является отменой задачи.
Методы7
GetIdstring
public string GetId();Возвращает строку ID, назначенного движком этому запуску. До Start и после WaitToFinish — "0". После завершения callback до join ID остаётся назначенным. Не равен гарантированно OS thread ID или ManagedThreadId; не используйте как постоянный ключ между запусками.
stringСтрока engine ID или "0" вне запущенного несобранного lifecycle.
IsAlivebool
public bool IsAlive();Показывает, что callback ещё выполняется, включая блокировку на Semaphore/Mutex. False не означает, что поток уже собран: после выполнения всё ещё нужен WaitToFinish. Это не проверка успешности результата и не отмена.
boolTrue, пока callback ещё выполняется/ожидает.
IsMainThreadbool
public static bool IsMainThread();Проверяет вызывающий поток, а не состояние конкретного экземпляра. True на главном потоке движка, false в проверенном worker. Не делает доступ к любому Resource/Entity автоматически безопасным.
boolTrue для главного потока текущего вызова.
IsStartedbool
public bool IsStarted();True после успешного Start до WaitToFinish, даже если callback уже вернул результат. Не синоним IsAlive. До join повторный Start отклоняется; завершённый, но несобранный поток всё ещё требует cleanup.
boolTrue после Start до join, включая уже завершённый callback.
SetThreadSafetyChecksEnabledvoid
public static void SetThreadSafetyChecksEnabled(bool enabled);Меняет проверки доступа для текущего worker-потока; вызов на главном потоке запрещён. enabled=false не добавляет блокировки и не делает активное дерево/ресурсы потокобезопасными. Не используйте для сокрытия race condition. В QA из worker проверен только true; отключение и ошибочный main-thread вызов не исполнялись.
| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
enabledTrue включает проверки текущего worker; false их подавляет, но не синхронизирует доступ.
StartError
public Error Start(Callable callable, ReckfellThread.Priority priority = ReckfellThread.Priority.Normal);Запускает Callable без передаваемых аргументов; результат затем читается через WaitToFinish. Error.Ok означает принятие запуска, не успешное окончание работы. Поток нельзя запустить повторно до join; недействительный Callable/priority дают InvalidParameter. Цель Callable должна оставаться живой. Приоритет — запрос планировщику, не гарантия времени выполнения. Контракт переноса исключений/отмены как у Task отсутствует; для остановки реализуйте свой согласованный флаг и пробуждение ожидающего worker.
| Имя | Тип | По умолчанию |
|---|---|---|
callable | Callable | — |
priority | ReckfellThread.Priority | ReckfellThread.Priority.Normal |
callableЖивой Callable без обязательных аргументов; не вызывайте delegate заранее вместо передачи.
priorityLow, Normal или High; запрос планирования, не гарантия ускорения/порядка.
ErrorError принятия запуска; Ok не означает завершённый результат.
WaitToFinishVariant
public Variant WaitToFinish();Блокирует вызывающий поток до завершения callback, возвращает его Variant и собирает native-поток. После этого IsStarted=false и разрешён новый Start. Не вызывайте из самого worker, до Start или удерживая mutex, нужный worker: это ошибка/взаимная блокировка. Сначала обеспечьте выход worker из ожидания. False от IsAlive не отменяет необходимость join. Сам callback может зависеть от главного потока — не блокируйте его без проверки этой зависимости.
VariantСобственный Variant результата callback; Nil допустим как результат и возможен при ошибочном вызове.
ReckfellThread.Priority
| Значение | Описание |
|---|---|
High = 2 | Поток, работающий с более высоким приоритетом, чем обычно. |
Low = 0 | Поток, работающий с более низким приоритетом, чем обычно. |
Normal = 1 | Поток со стандартным приоритетом. |