Exemplo n.º 1
0
        /// <summary>
        /// Gets data async.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="callback">The callback.</param>
        internal static void GetAsync(string key, Action <object> callback)
        {
            var data = Get(key);

            if (data != null)
            {
                callback(data);
            }
            else
            {
                CacheItem cacheItem;

                if (!Container.TryGetValue(key, out cacheItem))
                {
                    var syncTask = new CacheAsyncTask
                    {
                        Key      = key,
                        Callback = callback
                    };

                    lock (syncObject)
                    {
                        PendingAsyncQueue.Enqueue(syncTask);
                    }
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Syncs cache data using sync action.
        /// </summary>
        private static void Async()
        {
            while (true)
            {
                while (PendingAsyncQueue.Count > 0)
                {
                    var task = PendingAsyncQueue.Dequeue();

                    CacheAsyncTask actionTask;

                    if (AsyncTasks.TryGetValue(task.Key, out actionTask))
                    {
                        actionTask.SyncAction(task.Key, data =>
                        {
                            Add(task.Key, data, actionTask.DataExpires);

                            task.Callback(data);
                        });
                    }
                }

                Thread.Sleep(TimeSpan.FromSeconds(60));
            }
        }