# IsCompleted(EventID)

> Returns true if the asynchronous operation completed.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine.LightTransport](/engine/6000.0/script-reference/unityengine/lighttransport.md)
* **Assembly:** UnityEditor

```csharp
public bool IsCompleted(EventID id)
```

### Parameters

**** (\[EventID]\(/engine/6000.0/script-reference/unityengine/lighttransport/eventid)): ID of the event to query.

### Returns

| Type                                                          | Description                                       |
| ------------------------------------------------------------- | ------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True if the asynchronous operation has completed. |

### Remarks

This method returns immediately and does not wait for the operation to complete. Use [RadeonRaysContext.Flush](/engine/6000.0/script-reference/unityengine/lighttransport/radeonrayscontext/flush.md) to force the device implementation to start processing commands. Use [IDeviceContext.Wait](/engine/6000.0/script-reference/unityengine/lighttransport/idevicecontext/wait.md) to busy-wait for a specific event.

```csharp
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();
```

How to check if an asynchronous operation has completed.
