public AsyncEntryBlockUC TryEnter(int milliseconds) { AccessItem access; using (SpinLock.Enter()) { if (LockStatus == Status.Opened) { LockStatus = Status.Locked; return(new AsyncEntryBlockUC(ExclusiveEntry)); } Queue.Enqueue(access = AccessItem.NewTimeLimitedTCS(milliseconds)); } return(new AsyncEntryBlockUC(null, access.TCS)); }
public EntryBlockUC TryEnter(int milliseconds) { AccessItem access; using (SpinLock.Enter()) { if (LockStatus == Status.Opened) { LockStatus = Status.Locked; return(ExclusiveEntry); } Queue.Enqueue(access = AccessItem.NewTimeLimitedTCS(milliseconds)); } return(access.WaitForResult()); //waiting synchronously for completion }