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