var script = new Script();var func = script.LoadString("return coroutine.yield(42)");var co = script.CreateCoroutine(func);LuaValue result = co.Resume(); // Returns 42
using SolarSharp.Interpreter;using SolarSharp.Interpreter.DataTypes;var script = new Script();// Create a coroutine that yields valuesscript.DoString(@" function counter(max) for i = 1, max do coroutine.yield(i) end return 'done' end");var func = script.Globals.Get("counter");var co = script.CreateCoroutine(func);// Resume the coroutine manuallyConsole.WriteLine(co.State); // NotStartedvar result1 = co.Resume(5);Console.WriteLine($"Yielded: {result1.Number}"); // 1Console.WriteLine(co.State); // Suspendedvar result2 = co.Resume();Console.WriteLine($"Yielded: {result2.Number}"); // 2// Use as enumerableforeach (var value in co.AsTypedEnumerable()) { Console.WriteLine($"Yielded: {value}");}// Output: 3, 4, 5, "done"// Create a new coroutine with foreachvar co2 = script.CreateCoroutine(func);foreach (int num in co2.AsEnumerable<int>()) { Console.WriteLine($"Number: {num}"); if (num >= 3) break; // Stop early}// Passing arguments to resumescript.DoString(@" function processor() local value = coroutine.yield('ready') coroutine.yield('received: ' .. value) return 'finished' end");var co3 = script.CreateCoroutine(script.Globals.Get("processor"));Console.WriteLine(co3.Resume().String); // "ready"Console.WriteLine(co3.Resume("hello").String); // "received: hello"Console.WriteLine(co3.Resume().String); // "finished"// Check coroutine stateif (co3.State == CoroutineState.Dead) { Console.WriteLine("Coroutine has finished");}