diff options
| author | T. Adams <t.adams88@gmail.com> | 2015-04-03 11:04:25 -0700 |
|---|---|---|
| committer | T. Adams <t.adams88@gmail.com> | 2015-04-03 11:04:25 -0700 |
| commit | abf12569ba2aa31ea3a00e4faf3adad2f740cbd9 (patch) | |
| tree | 47c57c6361825491d38e3def6b716926ddd9aa59 /MediaBrowser.Common.Implementations | |
| parent | 46c92107490263f8e6abefbd2259780013fa195d (diff) | |
| parent | ef505c8e9e2b8f348aeaa89be6bc446014b72996 (diff) | |
Merging in latest dev
Diffstat (limited to 'MediaBrowser.Common.Implementations')
| -rw-r--r-- | MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs | 32 | ||||
| -rw-r--r-- | MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs | 37 |
2 files changed, 41 insertions, 28 deletions
diff --git a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs index b925649fc..94c91c55a 100644 --- a/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs +++ b/MediaBrowser.Common.Implementations/HttpClientManager/HttpClientManager.cs @@ -107,30 +107,40 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager private WebRequest GetRequest(HttpRequestOptions options, string method, bool enableHttpCompression) { - var request = (HttpWebRequest)WebRequest.Create(options.Url); + var request = WebRequest.Create(options.Url); + var httpWebRequest = request as HttpWebRequest; - AddRequestHeaders(request, options); + if (httpWebRequest != null) + { + AddRequestHeaders(httpWebRequest, options); - request.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None; + httpWebRequest.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None; + } request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache); - if (options.EnableKeepAlive) + if (httpWebRequest != null) { - request.KeepAlive = true; + if (options.EnableKeepAlive) + { + httpWebRequest.KeepAlive = true; + } } request.Method = method; request.Timeout = options.TimeoutMs; - if (!string.IsNullOrEmpty(options.Host)) + if (httpWebRequest != null) { - request.Host = options.Host; - } + if (!string.IsNullOrEmpty(options.Host)) + { + httpWebRequest.Host = options.Host; + } - if (!string.IsNullOrEmpty(options.Referer)) - { - request.Referer = options.Referer; + if (!string.IsNullOrEmpty(options.Referer)) + { + httpWebRequest.Referer = options.Referer; + } } //request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback; diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs index 4f84652c6..de7987bd2 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/TaskManager.cs @@ -6,6 +6,7 @@ using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Tasks; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; @@ -29,7 +30,8 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks /// <summary> /// The _task queue /// </summary> - private readonly SortedDictionary<Type, TaskExecutionOptions> _taskQueue = new SortedDictionary<Type, TaskExecutionOptions>(); + private readonly ConcurrentQueue<Tuple<Type, TaskExecutionOptions>> _taskQueue = + new ConcurrentQueue<Tuple<Type, TaskExecutionOptions>>(); /// <summary> /// Gets or sets the json serializer. @@ -136,25 +138,17 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks { var type = task.ScheduledTask.GetType(); + Logger.Info("Queueing task {0}", type.Name); + lock (_taskQueue) { - // If it's idle just execute immediately if (task.State == TaskState.Idle) { Execute(task, options); return; } - if (!_taskQueue.ContainsKey(type)) - { - Logger.Info("Queueing task {0}", type.Name); - _taskQueue.Add(type, options); - } - else - { - _taskQueue[type] = options; - Logger.Info("Task already queued: {0}", type.Name); - } + _taskQueue.Enqueue(new Tuple<Type, TaskExecutionOptions>(type, options)); } } @@ -241,15 +235,24 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks // Execute queued tasks lock (_taskQueue) { - foreach (var enqueuedType in _taskQueue.ToList()) + var list = new List<Tuple<Type, TaskExecutionOptions>>(); + + Tuple<Type, TaskExecutionOptions> item; + while (_taskQueue.TryDequeue(out item)) { - var scheduledTask = ScheduledTasks.First(t => t.ScheduledTask.GetType() == enqueuedType.Key); + if (list.All(i => i.Item1 != item.Item1)) + { + list.Add(item); + } + } + + foreach (var enqueuedType in list) + { + var scheduledTask = ScheduledTasks.First(t => t.ScheduledTask.GetType() == enqueuedType.Item1); if (scheduledTask.State == TaskState.Idle) { - Execute(scheduledTask, enqueuedType.Value); - - _taskQueue.Remove(enqueuedType.Key); + Execute(scheduledTask, enqueuedType.Item2); } } } |
