1234567891011121314151617181920212223242526272829303132333435363738 |
- using System;
- using System.Collections;
- using System.Runtime.CompilerServices;
- using System.Threading;
- using UnityEngine;
- namespace UnityAsync.Awaiters
- {
- public struct YieldInstructionAwaiter : INotifyCompletion
- {
- static readonly SendOrPostCallback postCallback = state => ((Action)state)();
- readonly YieldInstruction instruction;
- public YieldInstructionAwaiter(YieldInstruction instruction)
- {
- this.instruction = instruction;
- }
- public void OnCompleted(Action continuation)
- {
- if(AsyncManager.InUnityContext)
- AsyncManager.StartCoroutine(ContinuationCoroutine(continuation));
- else
- AsyncManager.UnitySyncContext.Send(postCallback, AsyncManager.StartCoroutine(ContinuationCoroutine(continuation)));
- }
- IEnumerator ContinuationCoroutine(Action continuation)
- {
- yield return instruction;
- continuation();
- }
- public bool IsCompleted => false;
- public void GetResult() { }
- }
- }
|