Coroutine 2.1.5-65

The Coroutine logo

Coroutine is a simple implementation of Unity's Coroutines to be used for any C# project

Features

Coroutine adds the ability to run coroutines. Coroutines are methods that run in parallel to the rest of the application through the use of an Enumerator. This allows for the coroutine to pause execution using the yield return statement.

There are two predefined ways to pause a coroutine:

  • Waiting for a certain amount of seconds to have passed
  • Waiting for a certain custom event to occur

Additionally, Coroutine provides the following features:

  • Creation of custom events to wait for
  • No multi-threading, which allows for any kind of process to be executed in a coroutine, including rendering
  • Thread-safety, which allows for coroutines to be started from different threads

How to Use

Setting up the CoroutineHandler

The CoroutineHandler is the place where coroutines get executed. For this to occur, the Tick method needs to be called continuously. The Tick method takes a single parameter which represents the amount of time since the last time it was called. It can either be called in your application's existing update loop or as follows.

var lastTime = DateTime.Now;
while (true) {
    var currTime = DateTime.Now;
    CoroutineHandler.Tick(currTime - lastTime);
    lastTime = currTime;
    Thread.Sleep(1);
}

Creating a Coroutine

To create a coroutine, simply create a method with the return type IEnumerator<Wait>. Then, you can use yield return to cause the coroutine to wait at any point:

private static IEnumerator<Wait> WaitSeconds() {
    Console.WriteLine("First thing " + DateTime.Now);
    yield return new Wait(1);
    Console.WriteLine("After 1 second " + DateTime.Now);
    yield return new Wait(5);
    Console.WriteLine("After 5 seconds " + DateTime.Now);
    yield return new Wait(10);
    Console.WriteLine("After 10 seconds " + DateTime.Now);
}

Starting a Coroutine

To start a coroutine, simply call Start:

CoroutineHandler.Start(WaitSeconds());

Using Events

To use an event, an Event instance first needs to be created. When not overriding any equality operators, only a single instance of each event should be used.

private static readonly Event TestEvent = new Event();

Waiting for an event in a coroutine works as follows:

private static IEnumerator<Wait> WaitForTestEvent() {
    yield return new Wait(TestEvent);
    Console.WriteLine("Test event received");
}

Of course, having time-based waits and event-based waits in the same coroutine is also supported.

To actually cause the event to be raised, causing all currently waiting coroutines to be continued, simply call RaiseEvent:

CoroutineHandler.RaiseEvent(TestEvent);

Additional Examples

For additional examples, take a look at the Example class.

Showing the top 20 packages that depend on Coroutine.

Packages Downloads
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
235
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
253
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
261
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
267
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
270
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
272
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
276
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
298
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
299
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
343
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
361
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
412
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
561
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
581
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
631
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
722
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
819
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
883
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
949
MLEM.Startup
MLEM Library for Extending MonoGame combined with some other useful libraries into a quick Game startup class
1,148

.NET Framework 4.5

.NET 6.0

  • No dependencies.

.NET Standard 2.0

  • No dependencies.

Version Downloads Last updated
2.1.5-65 207 02/23/2023
2.1.4-64 177 02/23/2023
2.1.4-63 130 02/23/2023
2.1.4-62 141 10/31/2022
2.1.4-61 143 10/22/2022
2.1.4-60 133 10/22/2022
2.1.4-59 136 10/22/2022
2.1.4-58 125 09/14/2022
2.1.3-57 114 09/14/2022
2.1.3-56 171 12/29/2021
2.1.2-55 171 12/29/2021
2.1.2-54 170 12/29/2021
2.1.2-53 153 12/29/2021
2.1.1-51 176 12/29/2021
2.1.1-3 162 12/29/2021
2.1.1-2 147 12/29/2021
2.1.0-52 147 12/29/2021
2.1.0-50 151 12/29/2021
2.1.0-48 152 12/29/2021
2.0.2-47 160 12/29/2021
2.0.2-46 164 12/29/2021
2.0.2-45 154 12/29/2021
2.0.2-44 192 12/29/2021
2.0.2-43 187 12/29/2021
2.0.2-39 156 12/29/2021
2.0.2-38 151 12/29/2021
2.0.2-37 153 12/29/2021
2.0.2-36 146 12/29/2021
2.0.2-35 159 12/29/2021
2.0.2-34 224 12/29/2021
2.0.2-33 171 12/29/2021
2.0.2-32 181 12/29/2021
2.0.2-31 166 12/29/2021
2.0.2-30 160 12/29/2021
2.0.1-29 161 12/29/2021
2.0.1-28 167 12/29/2021
2.0.1-27 165 12/29/2021
2.0.1-26 188 12/29/2021
2.0.1-25 159 12/29/2021
2.0.1-24 173 12/29/2021
2.0.1-23 144 12/29/2021
2.0.1-22 159 12/29/2021
2.0.1-21 161 12/29/2021
2.0.1-2 171 12/29/2021
2.0.1-1 150 12/29/2021
2.0.0-20 162 12/29/2021
2.0.0-18 145 12/29/2021
1.0.4-17 206 12/29/2021
1.0.4-15 170 12/29/2021
1.0.4-14 151 12/29/2021
1.0.3-13 180 12/29/2021
1.0.3-12 171 12/29/2021
1.0.3-11 171 12/29/2021
1.0.3-10 162 12/29/2021
1.0.3-9 159 12/29/2021
1.0.3-8 185 12/29/2021
1.0.3-7 157 12/29/2021
1.0.3-6 146 12/29/2021
1.0.2-5 161 12/29/2021