SignalAwaiter
Одноразовое ожидание сигнала с результатом Variant[].
Обычно используйте await receiver.ToSignal(source, signal). Ожидание подключается при создании SignalAwaiter и завершается при следующем сигнале. Если сигнал не придёт или владелец исчезнет, автоматическое завершение не гарантируется. Встроенного CancellationToken или тайм-аута у этого типа нет.
Пример ожидает ровно один строковый аргумент, копирует его в строку C# и освобождает полученные Variant. Вызовите ReadOnceAsync до испускания сигнала; receiver и emitter должны оставаться живыми. Пример не добавляет отмену.
using System;
using System.Threading.Tasks;
using Reckfell;
public static class SignalTextExample
{
// Call before the emitter sends its next signal. Both objects must stay alive.
public static async Task<string> ReadOnceAsync(Entity receiver, Entity emitter, StringName signal)
{
Variant[] values = await receiver.ToSignal(emitter, signal);
try
{
if (values.Length != 1 || values[0].VariantType != Variant.Type.String)
throw new InvalidOperationException("Expected one string signal argument.");
return values[0].AsString();
}
finally
{
foreach (Variant value in values)
value.Dispose();
}
}
}GetAwaiter возвращает тот же экземпляр. Для следующего события создайте новое ожидание через ToSignal. Не освобождайте один и тот же массив аргументов повторно при повторном чтении GetResult.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
SignalAwaiterКонструктор
public SignalAwaiter(ReckfellObject source, StringName signal, ReckfellObject target);Сразу подключает одноразовое ожидание signal у source с привязкой к target. Все объекты должны быть живыми, а сигнал существовать. Сам сигнал не испускает. Для обычного игрового кода удобнее receiver.ToSignal(source, signal). Конструктор не возвращает Error; ошибка подключения не является обещанием завершения ожидания или исключения CLR.
| Имя | Тип | По умолчанию |
|---|---|---|
source | ReckfellObject | — |
signal | StringName | — |
target | ReckfellObject | — |
sourceЖивой объект, который должен испустить сигнал.
signalИмя существующего сигнала source; аргументы результата определяются этим сигналом.
targetЖивой объект-получатель, с которым связывается native callable. Это отдельная роль от source; ToSignal использует вызывающий объект как target. Не удаляйте его во время ожидания.
Свойства1
IsCompletedСвойство
public bool IsCompleted { get; }Изначально false; при доставке сигнала становится true до вызова продолжения. Означает получение сигнала, а не жизнеспособность source или target. Удаление владельца не обязано менять значение на true.
Методы3
GetAwaiterIAwaiter<Variant[]>
public IAwaiter<Variant[]> GetAwaiter();Возвращает этот же экземпляр через IAwaiter<Variant[]>. Не создаёт новое подключение и не начинает повторное ожидание. При await уже завершённого экземпляра C# получает сохранённый результат.
IAwaiter<Variant[]>Тот же объект, приведённый к IAwaiter<Variant[]>.
GetResultVariant[]
public Variant[] GetResult();Возвращает сохранённый массив аргументов без ожидания и без новой копии. До завершения в текущей реализации возвращает null, несмотря на не-nullable сигнатуру: вызывайте через await или только после IsCompleted. После сигнала массив содержит собственные копии Variant; освободите каждый элемент один раз после использования. Повторный GetResult возвращает тот же массив, а не независимые значения.
Variant[]После доставки — аргументы сигнала в исходном порядке; для сигнала без аргументов — пустой массив. До доставки — null в текущей реализации.
OnCompletedvoid
public void OnCompleted(Action continuation);Сохраняет одно продолжение; повторный вызов заменяет предыдущее. При доставке сигнала сохранённое действие вызывается непосредственно из callback после установки результата и IsCompleted. Вызов после завершения сам по себе не запускает действие. Это часть протокола await: в обычном коде используйте await, а не ручную регистрацию. Не считайте метод диспетчером потока или подпиской на каждый сигнал.
| Имя | Тип | По умолчанию |
|---|---|---|
continuation | Action | — |
continuationПродолжение, вызываемое при завершении; не список независимых обработчиков.