コード例 #1
0
        public IList <Dog> Get()
        {
            IList <Dog> result = MemoryCache.Get <IList <Dog> >(cacheName);

            if (result == null)
            {
                Task <IList <Dog> > dbFetchTask = new Task <IList <Dog> >(() => DogService.Get());

                bool isRunning = false;
                lock (ThreadWatcher)
                {
                    isRunning = ThreadWatcher.IsRunning(cacheName);
                }
                if (!isRunning)
                {
                    ThreadStartedEvent?.Invoke(this, new ThreadStartedEvent(cacheName)); // Fire:a event.
                    dbFetchTask.Start();                                                 // Starta bara tråden, om det inte redan körs en sådan.
                }

                dbFetchTask.ContinueWith(x =>
                {
                    MemoryCache.Set(cacheName, x.Result, options: MemoryCacheEntryOptions);
                    ThreadFinishedEvent?.Invoke(this, new ThreadFinishedEvent(cacheName)); // Tala om att tråden är klar
                });
            }
            else
            {
                Console.WriteLine($"Used MemoryCache for {cacheName}.");
            }

            return(result);
        }
コード例 #2
0
 private void OnThreadFinishedEvent(object sender, ThreadFinishedEvent e)
 {
     Console.WriteLine("Stopped thread!!!!!!");
     lock (ThreadWatcher)
     {
         ThreadWatcher.FinishThread(e);
     }
 }