Loading files via WWW class and Unity hangs for a few seconds if I use coroutines. If I don't, it works perfectly. What is going on?

So, I’m reading audio files from my hard drive using WWW and I’d like the rest of the game to keep going while the files are loading. I try to use coroutines to prevent hangups, but they actually make my game hang until all the files are loaded. And if I don’t use them, it seems to work without glitches.

Can anyone explain what is going on? Why is the game hanging when I’m yielding?

Here are some code snippets.

With a coroutine

void Start()
{
	Debug.Log("Reading Files...");
	var audioFiles = Directory.GetFiles("audio", "*.ogg");
	
	StartCoroutine(AddAudioFiles(audioFiles));
}

IEnumerator AddAudioFiles(string[] files)
{
	foreach(var file in files)
	{
		Debug.Log("Begin loading url file");
		WWW www = new WWW("file://"+file);
		
		yield return www;
		
		var clip = www.audioClip;
		
		clips.Add(www.audioClip);
	}
}

Without a coroutine (just remove the yield)

void Start()
{
	Debug.Log("Reading Files...");
	var audioFiles = Directory.GetFiles("audio", "*.ogg");
	
	AddAudioFiles(audioFiles);
}

void AddAudioFiles(string[] files)
{
	foreach(var file in files)
	{
		Debug.Log("Begin loading url file");
		WWW www = new WWW("file://"+file);
		
		var clip = www.audioClip;
		
		clips.Add(www.audioClip);
	}
}

Try this: (Im not sure but this may have different effect)

void Start()
{
    Debug.Log("Reading Files...");
    var audioFiles = Directory.GetFiles("audio", "*.ogg");
     
    StartCoroutine(AddAudioFiles(audioFiles));
}
     
IEnumerator AddAudioFiles(string[] files)
{
    Debug.Log("Begin loading url file");
	foreach(var file in files)
	{
		yield return StartCoroutine (LoadAudioFile (file));
    }
}
IEnumerator LoadAudioFile (string url) {
	WWW www = new WWW ("file://" + url);
	yield return www;
	var clip = www.audioClip;
	clips.Add (clip);
}