SceneManager.LoadSceneAsync is only working once

So what’s happening is that the LoadSceneAsync works perfectly…once. Then it fails to work the second time.

My game only has one level, so I only need to use this for the scene change between the main menu and the level scene. The first time this happens, it works perfectly, displaying the loading animation and then loading the level. However, after exiting the level and going back to the main menu and clicking the same start button, the script no longer works.
The second time the loading script is called, the game switches to the loading screen, and then freezes.

Here is the script I am using:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class LoadingScreen : MonoBehaviour {

AsyncOperation async;

void Awake () {

}

// Use this for initialization
void Start () {
	StartCoroutine("LevelSceneLoading");
}

// Update is called once per frame
void Update () {

}

IEnumerator LevelSceneLoading() {
	yield return new WaitForSeconds (2);
	async = SceneManager.LoadSceneAsync("Level_Scene");
	while (!async.isDone) {
		Debug.Log(async.progress);
		yield return async;
	}
}

}

The code has been revised to no longer include Destroy(gameObject); but still doesn’t work.

Try removing this

Destroy(gameObject);

The issue was in the return value

This is what the corrected Coroutine looks like:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class LoadingScreen : MonoBehaviour {

AsyncOperation async;

IEnumerator LoadLevelRealProgress () {
	yield return null;
	async = SceneManager.LoadSceneAsync("Level_Scene");
	StopCoroutine("LoadLevelRealProgress");
	while (!async.isDone) {
		Debug.Log(async.progress);
		yield return async;
	}
}

}