using System; namespace XGame.Framework.Asyncs { public class Awaiter : IAwaiter { protected Action _continuation; public bool IsCompleted { get; protected set; } public void OnCompleted(Action continuation) { if (IsCompleted) { // 如果 await 开始时任务已经执行完成,则直接执行 await 后面的代码。 // 注意,即便 _continuation 有值,也无需关心,因为报告结束的时候就会将其执行。 continuation?.Invoke(); } else { // 当使用多个 await 关键字等待此同一个 awaitable 实例时,此 OnCompleted 方法会被多次执行。 // 当任务真正结束后,需要将这些所有的 await 后面的代码都执行。 _continuation += continuation; } } public virtual void Completed(IAsync async) { if (IsCompleted) return; IsCompleted = true; _continuation?.Invoke(); } //public void GetResult() { } } }