# WaitWhile

> Initializes a yield instruction with a given delegate to be evaluated.

## Definition

* **Type:** Constructor
* **Namespace:** [UnityEngine](/engine/6000.0/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

## WaitWhile(Func\<bool>)

Initializes a yield instruction with a given delegate to be evaluated.

```csharp
public WaitWhile(Func<bool> predicate)
```

### Parameters

**** (\[Func\<bool>]\(https\://learn.microsoft.com/dotnet/api/system.func-1)): The supplied delegate will be evaluated each frame after [MonoBehaviour.Update()](/engine/6000.0/script-reference/unityengine/monobehaviour/update.md) and before [MonoBehaviour.LateUpdate()](/engine/6000.0/script-reference/unityengine/monobehaviour/lateupdate.md) until delegate returns false.

## WaitWhile(Func\<bool>, TimeSpan, Action, WaitTimeoutMode)

Initializes a yield instruction with a given delegate to be evaluated.

```csharp
public WaitWhile(Func<bool> predicate, TimeSpan timeout, Action onTimeout, WaitTimeoutMode timeoutMode = WaitTimeoutMode.Realtime)
```

### Parameters

**** (\[Func\<bool>]\(https\://learn.microsoft.com/dotnet/api/system.func-1)): The supplied delegate will be evaluated each frame after [MonoBehaviour.Update()](/engine/6000.0/script-reference/unityengine/monobehaviour/update.md) and before [MonoBehaviour.LateUpdate()](/engine/6000.0/script-reference/unityengine/monobehaviour/lateupdate.md) until delegate returns false.**** (\[TimeSpan]\(https\://learn.microsoft.com/dotnet/api/system.timespan)): Maximum time to wait after creation of the instance for the predicate to return false.**** (\[Action]\(https\://learn.microsoft.com/dotnet/api/system.action)): The action to perform when the timeout is reached. Only performed if the predicate fails to return false before the maximum time specified.**** (\[WaitTimeoutMode]\(/engine/6000.0/script-reference/unityengine/waittimeoutmode)): Mode in which to measure time to determine timeout. Real time by default. Can be set to in-game time, which is scaled according to the value of [Time.timeScale](/engine/6000.0/script-reference/unityengine/time/timescale.md).

### Examples

```csharp
using UnityEngine;
using System;
using System.Collections;

public class WaitWhileExample : MonoBehaviour
{
    public bool buttonPressed;

    void Start()
    {
        StartCoroutine(Example());
    }

    IEnumerator Example()
    {
        Debug.Log("Waiting for button to be pressed...");
        yield return new WaitWhile(() => !buttonPressed, TimeSpan.FromSeconds(3), () => Debug.Log("button was not pressed in time!"));
    }
}
```
