public void Run() { var someDisposable = Substitute.For <IDisposable>(); someDisposable.DidNotReceive().Dispose(); var threadLocal = new ThreadLocal <IDisposable>(() => someDisposable); threadLocal.IsValueCreated.ShouldBeFalse(); threadLocal.Value.ShouldBe(someDisposable); threadLocal.IsValueCreated.ShouldBeTrue(); threadLocal.ToString().ShouldStartWith("Substitute.IDisposable|"); threadLocal.Dispose(); Should.Throw <ObjectDisposedException>(() => threadLocal.Value.ShouldBe(someDisposable)) .Message.ShouldBe("Cannot access a disposed object.\r\nObject name: 'The ThreadLocal object has been disposed.'."); someDisposable.DidNotReceive().Dispose(); var threadLocalDisposable = new ThreadLocalDisposable <IDisposable>(() => someDisposable); threadLocalDisposable.IsValueCreated.ShouldBeFalse(); threadLocalDisposable.Value.ShouldBe(someDisposable); threadLocalDisposable.IsValueCreated.ShouldBeTrue(); threadLocalDisposable.ToString().ShouldStartWith("Substitute.IDisposable|"); threadLocalDisposable.Dispose(); Should.Throw <ObjectDisposedException>(() => threadLocalDisposable.Value.ShouldBe(someDisposable)) .Message.ShouldBe("Cannot access a disposed object.\r\nObject name: 'The ThreadLocal object has been disposed.'."); someDisposable.Received(1).Dispose(); }
/// <summary> /// Create an instance of the <see cref="LZ4Compressor"/>. /// </summary> public LZ4Compressor() { _readBuffer = new ThreadLocal <byte[]>(() => new byte[BufferSize]); _writeBuffer = new ThreadLocal <byte[]>(() => new byte[BufferSize]); _streamIn = new ThreadLocalDisposable <MemoryStream>(() => new MemoryStream()); _streamOut = new ThreadLocalDisposable <MemoryStream>(() => new MemoryStream()); }
/// <summary> /// Check the Database Connection /// </summary> private void CheckConnection() { try { if (_connection != null) { _connection.Dispose(); } _connection = new ThreadLocalDisposable<SQLiteConnection>(() => new SQLiteConnection(ConnectionString)); if (_database != null) { _database.Dispose(); } _database = new ThreadLocalDisposable<PetaPoco.Database>(() => new PetaPoco.Database(Connection)); bool exists = TableExists(SqlTable.WuHistory); if (!exists) { CreateTable(SqlTable.WuHistory); CreateTable(SqlTable.Version); SetDatabaseVersion(Application.VersionWithRevision); } // verify the connection by performing a db operation Select("SELECT * FROM [WuHistory] LIMIT 1"); Connected = true; } catch (Exception ex) { _logger.ErrorFormat(ex, "{0}", ex.Message); if (_connection != null) { _connection.Dispose(); } if (_database != null) { _database.Dispose(); } Connected = false; } }