- Home /
Is there any workaround to run corutines in an other thread?
I have code that looks something like this:
IEnumerator SomeCoroutine()
{
//Some logic
if (wait) yield return new WaitForSeconds(waitTime);
//Some more logic
if (wait) yield return new WaitForSeconds(secondWaitTime);
//Some more logic...
}
I use the same code for the game itself and for AI simulation. The problem is that if the simulation is long, it will cause the main thread to freeze for a second sometimes.
If I separate the code for AI simulation, it will basically cause me a lot of duplicated code. I simply want those coroutines to run as normal functions in another thread ( when "wait" value is false ).
Answer by Scribe · May 06, 2018 at 01:59 PM
IEnumerator is a C# interface that basically just has a way to MoveNext
to a new element. StartCoroutine is a Unity specific way to loop through each element and perform some extra behaviour based on the output, but you can just do the looping yourself and ignore the output entirely if you want. Here's an example:
void Start () {
StartCoroutine(LoggingCoroutine("Unity coroutine"));
StartQuickCoroutine(LoggingCoroutine("Quick coroutine"));
}
// This one runs all the code in the Enumerator as usual but doesn't do anything with the values that are being yielded
private void StartQuickCoroutine(IEnumerator enumerator)
{
while (enumerator.MoveNext())
{
//Just keep going
}
}
IEnumerator LoggingCoroutine(string whoAmI)
{
yield return new WaitForSeconds(5);
Debug.Log(whoAmI + " is finished");
}
The great thing about this is that is doesn't even require you to say whether you want to wait or not, as nothing is going to do the wait logic if you loop through it yourself.
Your answer
Follow this Question
Related Questions
Yield WaitForSeconds Not Working. Coroutine. 1 Answer
yield return new WaitForSeconds () not working 1 Answer
How to get Coroutine's remaining time in WaitForSeconds? 2 Answers
How to create a delay in a function being called in update? 2 Answers
How to make WaitForSeconds work as a repeating/looping timer? 1 Answer