using System; using System.Threading; using System.Threading.Tasks; namespace ZeroLevel.Services.Shedulling { internal class ExpiredAsyncObject { private static long _counter = 0; public ExpiredAsyncObject() { Key = Interlocked.Increment(ref _counter); } public ExpiredAsyncObject(bool has_no_key) { if (has_no_key) Key = -1; else Key = Interlocked.Increment(ref _counter); } public ExpiredAsyncObject Reset(DateTime nextDate) { ExpirationDate = nextDate; Next = null; return this; } /// /// Событие при завершении ожидания /// public Func Callback; /// /// Срок истечения ожидания /// public DateTime ExpirationDate; /// /// Следующий объект с ближайшей датой окончания ожидания /// public ExpiredAsyncObject Next; /// /// Ключ для идентификации ожидающего события /// public long Key { get; } } }