public void MonitorExceptionTest()
    {

      using ( var provider = new MemoryCacheProvider( "Test" ).AsAsyncProvider() )
      {
        var cacheService = new CacheService( provider );
        var monitor = new CacheServiceMonitorWithException();
        cacheService.RegisterMonitor( monitor );


        Task.Run( (Func<Task>) (async () =>
        {

          await cacheService.FetchOrAdd<string>( (string) "Test", (Func<Task<string>>) (() => (Task<string>) Task.Run( (Func<string>) (() => (string) "Test") )), (Caching.CachePolicy) Caching.CachePolicy.Expires( (TimeSpan) TimeSpan.FromHours( (double) 1 ) ) );
          await cacheService.FetchOrAdd<string>( (string) "Test", (Func<Task<string>>) (() => (Task<string>) Task.Run( (Func<string>) (() => (string) "Test") )), (Caching.CachePolicy) Caching.CachePolicy.Expires( (TimeSpan) TimeSpan.FromHours( (double) 1 ) ) );

          await Task.Delay( 100 );

          await cacheService.FetchOrAdd<string>( (string) "Test", (Func<Task<string>>) (() => (Task<string>) Task.Run( (Func<string>) (() => (string) "Test") )), (Caching.CachePolicy) Caching.CachePolicy.Expires( (TimeSpan) TimeSpan.FromHours( (double) 1 ) ) );
          await cacheService.FetchOrAdd<string>( (string) "Test", (Func<Task<string>>) (() => (Task<string>) Task.Run( (Func<string>) (() => (string) "Test") )), (Caching.CachePolicy) Caching.CachePolicy.Expires( (TimeSpan) TimeSpan.FromHours( (double) 1 ) ) );

        })
        ).Wait();


        Assert.AreEqual( monitor.Misses, 1 );
        Assert.AreEqual( monitor.Hits, 3 );

      }

    }
        public void MonitorExceptionTest()
        {
            using (var provider = new MemoryCacheProvider("Test").AsAsyncProvider())
            {
                var cacheService = new CacheService(provider);
                var monitor      = new CacheServiceMonitorWithException();
                cacheService.RegisterMonitor(monitor);


                Task.Run((Func <Task>)(async() =>
                {
                    await cacheService.FetchOrAdd <string>((string)"Test", (Func <Task <string> >)(() => (Task <string>)Task.Run((Func <string>)(() => (string)"Test"))), (Caching.CachePolicy)Caching.CachePolicy.Expires((TimeSpan)TimeSpan.FromHours((double)1)));
                    await cacheService.FetchOrAdd <string>((string)"Test", (Func <Task <string> >)(() => (Task <string>)Task.Run((Func <string>)(() => (string)"Test"))), (Caching.CachePolicy)Caching.CachePolicy.Expires((TimeSpan)TimeSpan.FromHours((double)1)));

                    await Task.Delay(100);

                    await cacheService.FetchOrAdd <string>((string)"Test", (Func <Task <string> >)(() => (Task <string>)Task.Run((Func <string>)(() => (string)"Test"))), (Caching.CachePolicy)Caching.CachePolicy.Expires((TimeSpan)TimeSpan.FromHours((double)1)));
                    await cacheService.FetchOrAdd <string>((string)"Test", (Func <Task <string> >)(() => (Task <string>)Task.Run((Func <string>)(() => (string)"Test"))), (Caching.CachePolicy)Caching.CachePolicy.Expires((TimeSpan)TimeSpan.FromHours((double)1)));
                })
                         ).Wait();


                Assert.AreEqual(monitor.Misses, 1);
                Assert.AreEqual(monitor.Hits, 3);
            }
        }