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());
 }
Example #3
0
        /// <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;
             }
        }