Насчёт статичности это уж вам решать, а вообще проще всего в корутины передавать колбэк:
using UnityEngine;
using System;
using System.Collections;
public class Example : MonoBehaviour
{
private void Start()
{
StartCoroutine(DownloadFile("url", text => DeserializeConfig(text, () => Debug.Log("Done"))));
}
private IEnumerator DownloadFile(string url, Action<string> onComplete)
{
using (WWW www = new WWW(url))
{
yield return www;
onComplete(www.text);
}
}
private void DeserializeConfig(string text, Action onComplete)
{
Debug.Log(text);
onComplete();
}
}
При такой схеме очень быстро выстраивается лесенка из вложенных делегатов, но, по крайней мере, она выполняет свою работу. Лучшим решением будет использовать
промисы или
UniRx, тогда будет проще управлять потоком.
Блокировка IEnumerator зависит от тяжести операций между yield'ами, корутины выполняются в том же самом потоке, они просто позволяют растащить выполнение кода между кадрами.