internal void GetWriterLock() { IncrementRef(); #if NET40 _rwsObject.EnterWriteLock(); #else _rwsObject.AcquireWriterLock(Timeout.Infinite); #endif }
/// <summary> /// See <see cref="IServiceContainer.Add"/>. /// </summary> public virtual void Add(AbstractServiceEntry entry) { CheckNotDisposed(); Ensure.Parameter.IsNotNull(entry, nameof(entry)); using (FLock.AcquireWriterLock()) { if (FEntries.TryGetValue(entry, out AbstractServiceEntry existing)) { // // Abstract bejegyzest felul lehet irni (de csak azt). // if (existing.GetType() != typeof(AbstractServiceEntry)) { throw new ServiceAlreadyRegisteredException(string.Format(Resources.Culture, Resources.ALREADY_REGISTERED, existing.FriendlyName())); } if (ShouldDispose(existing)) { // // "AbstractServiceEntry"-nel nincs tenyleges Dispose() logika csak azert van hivva // h ne legyen figyelmeztetes a debug kimeneten -> DisposeAsync() hivasnak se lenne // ertelme. // existing.Dispose(); } } // // Ha volt mar bejegyzes adott kulccsal akkor felulijra kulomben hozzaadja. // FEntries[entry] = entry; } }
/// <inheritdoc /> public override void SaveSession(UploadSession session, bool isCreate) { // TODO: uncomment, add check to make sure object is the same //if (isCreate) //{ try { #if NET35 _sessionsLock.EnterWriteLock(); #else _sessionsLock.AcquireWriterLock(-1); #endif _uploadSessions[session.UploadSessionId] = session; } finally { #if NET35 _sessionsLock.ExitWriteLock(); #else _sessionsLock.ReleaseWriterLock(); #endif } //} }
public static CtorAccessor Get(Type type) { CtorAccessor ctorAccessor = null; try { #if (dotNET35 || dotNET4) ctorAccessorsCacheLock.EnterReadLock(); #else ctorAccessorsCacheLock.AcquireReaderLock(-1); #endif if (ctorAccessorsCache.TryGetValue(type, out ctorAccessor)) { return(ctorAccessor); } } finally { #if (dotNET35 || dotNET4) ctorAccessorsCacheLock.ExitReadLock(); #else ctorAccessorsCacheLock.ReleaseReaderLock(); #endif } try { #if (dotNET35 || dotNET4) ctorAccessorsCacheLock.EnterWriteLock(); #else ctorAccessorsCacheLock.AcquireWriterLock(-1); #endif if (ctorAccessorsCache.TryGetValue(type, out ctorAccessor)) { return(ctorAccessor); } ctorAccessor = new CtorAccessor(type); ctorAccessorsCache[type] = ctorAccessor; } finally { #if (dotNET35 || dotNET4) ctorAccessorsCacheLock.ExitWriteLock(); #else ctorAccessorsCacheLock.ReleaseWriterLock(); #endif } return(ctorAccessor); }
public static ObjectSerializer Get(Type type) { ObjectSerializer serializer = null; try { #if (dotNET35 || dotNET4) serializersCacheLock.EnterReadLock(); #else serializersCacheLock.AcquireReaderLock(-1); #endif if (serializersCache.TryGetValue(type, out serializer)) { return(serializer); } } finally { #if (dotNET35 || dotNET4) serializersCacheLock.ExitReadLock(); #else serializersCacheLock.ReleaseReaderLock(); #endif } try { #if (dotNET35 || dotNET4) serializersCacheLock.EnterWriteLock(); #else serializersCacheLock.AcquireWriterLock(-1); #endif if (serializersCache.TryGetValue(type, out serializer)) { return(serializer); } serializer = new ObjectSerializer(type); serializersCache[type] = serializer; } finally { #if (dotNET35 || dotNET4) serializersCacheLock.ExitWriteLock(); #else serializersCacheLock.ReleaseWriterLock(); #endif } return(serializer); }
/// <inheritdoc /> public override void RemoveSession(string uploadSessionId) { try { #if NET35 _requestsLock.EnterWriteLock(); #else _requestsLock.AcquireWriterLock(-1); #endif _uploadRequests.Remove(uploadSessionId); } finally { #if NET35 _requestsLock.ExitWriteLock(); #else _requestsLock.ReleaseWriterLock(); #endif } try { #if NET35 _sessionsLock.EnterWriteLock(); #else _sessionsLock.AcquireWriterLock(-1); #endif _uploadSessions.Remove(uploadSessionId); } finally { #if NET35 _sessionsLock.ExitWriteLock(); #else _sessionsLock.ReleaseWriterLock(); #endif } }
public void EnterWriteLock(out ReaderWriterLockCookie cookie, int millisecondsTimeout) { cookie = new ReaderWriterLockCookie(); #if NET35_OR_GREATER || NETCOREAPP || NETSTANDARD if (ReaderWriterLock.IsWriteLockHeld) { return; } if (ReaderWriterLock.IsReadLockHeld) { cookie.FromRead = true; ReaderWriterLock.ExitReadLock(); } if (!ReaderWriterLock.TryEnterWriteLock(millisecondsTimeout)) { if (cookie.FromRead) { if (!ReaderWriterLock.TryEnterReadLock(millisecondsTimeout)) { throw new TimeoutException("恢复读锁超时"); } } throw new TimeoutException("获取写锁超时"); } #else if (ReaderWriterLock.IsWriterLockHeld) { return; } if (ReaderWriterLock.IsReaderLockHeld) { cookie.FromRead = true; cookie.LockCookie = ReaderWriterLock.UpgradeToWriterLock(millisecondsTimeout); return; } ReaderWriterLock.AcquireWriterLock(millisecondsTimeout); #endif }