RadeonRaysContext.IsCompleted
Declaration
public bool IsCompleted(LightTransport.EventID id);Параметры
| Параметр | Описание |
|---|---|
| Идентификатор | ID события для запроса. |
Возвращаемое значение
логическое True, если асинхронная операция завершена.
Описание
Возвращает true, если асинхронная операция завершена.
Этот метод возвращается немедленно и не ожидает завершения операции. Используйте Flush, чтобы заставить реализацию устройства начать обработку команд. Используйте IDeviceContext.Wait для busy-wait для определенного события.
using System.Threading; using Unity.Collections; using UnityEngine; using UnityEngine.LightTransport;
IDeviceContext ctx = new RadeonRaysContext(); ctx.Initialize(); uint length = 8; var input = new NativeArray<byte>((int)length, Allocator.Persistent); for (int i = 0; i < length; ++i) { input[i] = (byte)i; } var output = new NativeArray<byte>((int)length, Allocator.Persistent); BufferID id = ctx.CreateBuffer(length, 1); var writeEvent = ctx.CreateEvent(); ctx.WriteBuffer(id.Slice<byte>(), input, writeEvent); var readEvent = ctx.CreateEvent(); ctx.ReadBuffer(id.Slice<byte>(), output, readEvent); bool flushOk = ctx.Flush(); Assert.IsTrue(flushOk); input.Dispose(); var watchDogTimeout = Time.realtimeSinceStartup + 5.0f; while (!ctx.IsCompleted(readEvent)) { Thread.Sleep(10); if (Time.realtimeSinceStartup > watchDogTimeout) Assert.IsTrue(false, "watchdog timeout"); }
// The event has completed. ctx.DestroyEvent(readEvent); ctx.DestroyEvent(writeEvent);
ctx.DestroyBuffer(id); for (int i = 0; i < length; ++i) Assert.AreEqual((byte)i, output[i]); output.Dispose(); ctx.Dispose();
Как проверить, завершена ли асинхронная операция.