Statistics
| Branch: | Revision:

root / trunk / Pithos.Core / JobQueue.cs @ d15e99b4

History | View | Annotate | Download (1.3 kB)

1
// -----------------------------------------------------------------------
2
// <copyright file="JobQueue.cs" company="Microsoft">
3
// TODO: Update copyright text.
4
// </copyright>
5
// -----------------------------------------------------------------------
6

    
7
using System.Collections.Concurrent;
8
using System.Threading;
9
using System.Threading.Tasks;
10

    
11
namespace Pithos.Core
12
{
13
    using System;
14
    using System.Collections.Generic;
15
    using System.Linq;
16
    using System.Text;
17

    
18
    /// <summary>
19
    /// TODO: Update summary.
20
    /// </summary>
21
    public class JobQueue
22
    {
23
        private readonly BlockingCollection<Action> _statusUpdateQueue = new BlockingCollection<Action>();
24
        private CancellationToken _cancellationToken;
25
        
26

    
27
        public void Start(CancellationToken token)
28
        {
29
            _cancellationToken = token;
30
            Task.Factory.StartNew(ProcessUpdates, _cancellationToken);
31
        }
32

    
33
        private void ProcessUpdates()
34
        {
35
            foreach (var action in _statusUpdateQueue.GetConsumingEnumerable())
36
            {
37
                action();
38
            }
39
        }
40

    
41
        public void Add(Action action)
42
        {
43
            _statusUpdateQueue.Add(action);
44
        }
45

    
46
        public void Stop()
47
        {
48
            _statusUpdateQueue.CompleteAdding();
49
        }
50
       
51
    }
52
}