public void TaskStatusChanged(string Owner, string taskId, SandboxDatabaseManager.Tasks.TaskStatus status)
        {

            if(!Stats.ContainsKey(Owner))
            {
                lock(Stats)
                {
                    // now check once more this time in locked state.
                    if (!Stats.ContainsKey(Owner))
                    {
                        Stats[Owner] = new List<BackgroundTasksStat>();
                    }
                
                }
            }

            var tasks = Stats[Owner];

            List<StatItem> resultToSend;

            lock (tasks)
            {
                var taskRetrieved =  tasks.FirstOrDefault(item => item.TaskID == taskId);
                if(taskRetrieved != null)
                {
                    taskRetrieved.Status = status;
                }
                else
                {
                    tasks.Add(new BackgroundTasksStat(taskId, status));
                }

                resultToSend = tasks.GroupBy(item => item.Status).Select(item => new StatItem() { Status = item.Key.ToString(), Count = item.Count() }).ToList();
            }

            if (!resultToSend.Any(item => item.Status == SandboxDatabaseManager.Tasks.TaskStatus.Running.ToString()))
                resultToSend.Add(new StatItem() { Status = SandboxDatabaseManager.Tasks.TaskStatus.Running.ToString(), Count = 0 });

            if (!resultToSend.Any(item => item.Status == SandboxDatabaseManager.Tasks.TaskStatus.Failed.ToString()))
                resultToSend.Add(new StatItem() { Status = SandboxDatabaseManager.Tasks.TaskStatus.Failed.ToString(), Count = 0 });

            if (!resultToSend.Any(item => item.Status == SandboxDatabaseManager.Tasks.TaskStatus.Succeeded.ToString()))
                resultToSend.Add(new StatItem() { Status = SandboxDatabaseManager.Tasks.TaskStatus.Succeeded.ToString(), Count = 0 });

            List<string> userConnections;
            
            
            if(UsersToConnections.TryGetValue(Owner, out userConnections))
            {

                lock (userConnections)
                {
                    List<string> problematicConnectionsToRemove = new List<string>();

                    foreach (string connection in userConnections)
                    {
                        try
                        {
                            Clients.Client(connection).updateBackgroundTaskStats(resultToSend);
                        }
                        catch (Exception ex)
                        {
                            problematicConnectionsToRemove.Add(connection);
                            Log.Error("Exception while updating background task stats to client.", ex);
                        }
                    }

                    foreach (var toRemove in problematicConnectionsToRemove)
                    {
                        userConnections.Remove(toRemove);
                    }
                }
            }

        }
 public BackgroundTasksStat(string taskID, SandboxDatabaseManager.Tasks.TaskStatus status)
 {
     TaskID = taskID;
     Status = status;
 }