123456789101112131415161718192021222324252627282930313233343536373839 |
- 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() { }
- }
- }
|