# backgroundLoadingPriority

> Priority of background loading thread.

## Definition

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

```csharp
public static ThreadPriority backgroundLoadingPriority { get; set; }
```

### Remarks

Lets you control how long it takes to load data asynchronously vs performance impact on the game while loading in the background.

**Note**: This setting has no effect in the Editor; it only applies in a built Player.

Asynchronous load functions that load objects ([Resources.LoadAsync](/engine/6000.7/script-reference/unityengine/resources/loadasync.md), [AssetBundle.LoadAssetAsync](/engine/6000.7/script-reference/unityengine/assetbundle/loadassetasync.md), LoadAllAssetAsync), scenes ([SceneManager.LoadSceneAsync](/engine/6000.7/script-reference/unityengine/scenemanagement/scenemanager/loadsceneasync.md)) do data read and deserialization on a separate background loading thread and object integration on a main thread. *Integration* depends on an object type and for textures, meshes means uploading data to the GPU, audio clips prepare data for playing.

To avoid hiccups we limit *integration* time on a main thread depending on [Application.backgroundLoadingPriority](/engine/6000.7/script-reference/unityengine/application/backgroundloadingpriority.md) value:

* [ThreadPriority.Low](/engine/6000.7/script-reference/unityengine/threadpriority/low.md) - 2ms

* [ThreadPriority.BelowNormal](/engine/6000.7/script-reference/unityengine/threadpriority/belownormal.md) - 4ms

* [ThreadPriority.Normal](/engine/6000.7/script-reference/unityengine/threadpriority/normal.md) - 10ms

* [ThreadPriority.High](/engine/6000.7/script-reference/unityengine/threadpriority/high.md) - 50ms

This value defines the maximum time all asynchronous operations can spend within a single frame on a main thread.

The default value is [ThreadPriority.BelowNormal](/engine/6000.7/script-reference/unityengine/threadpriority/belownormal.md), however some platforms override it:

* Universal Windows Platform - [ThreadPriority.High](/engine/6000.7/script-reference/unityengine/threadpriority/high.md)

* Consoles - [ThreadPriority.Normal](/engine/6000.7/script-reference/unityengine/threadpriority/normal.md)

Background loading thread uses [Application.backgroundLoadingPriority](/engine/6000.7/script-reference/unityengine/application/backgroundloadingpriority.md) directly. This property's value is passed to the operating system as that thread's scheduling priority, with no conversion or indirection.

The Profiler marker **Application.Integrate Assets in Background** lets you optimize background loading.

```csharp
using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Example1()
    {
        // Load as much data as possible, as a result frame rate will drop.
        // Good for fast loading when showing progress bars.

        Application.backgroundLoadingPriority = ThreadPriority.High;
    }

    void Example2()
    {
        // Load data very slowly and try not to affect performance of the game.
        // Good for loading in the background while the game is playing.

        Application.backgroundLoadingPriority = ThreadPriority.Low;
    }
}
```

Additional Resources: [ThreadPriority](/engine/6000.7/script-reference/unityengine/threadpriority.md) enum, [AsyncOperation.priority](/engine/6000.7/script-reference/unityengine/asyncoperation/priority.md).
