public static async ETTask <CoroutineLock> Wait(this CoroutineLockComponent self, int coroutineLockType, long key, int time = 60000) { CoroutineLockQueueType coroutineLockQueueType = self.list[coroutineLockType]; CoroutineLockQueue queue = coroutineLockQueueType.GetChild <CoroutineLockQueue>(key); if (queue == null) { CoroutineLockQueue coroutineLockQueue = coroutineLockQueueType.AddChildWithId <CoroutineLockQueue>(key, true); return(self.CreateCoroutineLock(coroutineLockQueue, coroutineLockType, key, time, 1)); } ETTask <CoroutineLock> tcs = ETTask <CoroutineLock> .Create(true); queue.Add(tcs, time); return(await tcs); }
private static void Notify(this CoroutineLockComponent self, int coroutineLockType, long key, int level) { CoroutineLockQueueType coroutineLockQueueType = self.list[coroutineLockType]; CoroutineLockQueue queue = coroutineLockQueueType.GetChild <CoroutineLockQueue>(key); if (queue == null) { return; } if (queue.Count == 0) { coroutineLockQueueType.RemoveChild(key); return; } CoroutineLockInfo coroutineLockInfo = queue.Dequeue(); coroutineLockInfo.Tcs.SetResult(self.CreateCoroutineLock(queue, coroutineLockType, key, coroutineLockInfo.Time, level)); }