How can I create an async structure that will be consist of stack of delegates and popping them and invoke each of them every N ms?
The problem is now I have lot delegates that invoke changes on ui and it causes ui freezing so how to make this delegates invoking every N ms if stack is not empty.
Now I have this
    class CallbackRestriction
    {
        private Stack<KeyValuePair<Action<ImageWrapper>, ImageWrapper>> _callbackList = 
            new Stack<KeyValuePair<Action<ImageWrapper>, ImageWrapper>>();
        public void AddCallback(Action<ImageWrapper> action, ImageWrapper payload)
        {
            _callbackList.Push(new KeyValuePair<Action<ImageWrapper>, ImageWrapper>(action, payload));
        }
        private async Task CallbackEmitLoop()
        {
            while (true)
            {
                await Task.Delay(TimeSpan.FromMilliseconds(20));
                try
                {
                    var callback = _callbackList.Pop();
                    callback.Key.Invoke(callback.Value);
                }
                catch (Exception e)
                {
                    await Task.Delay(200);
                }
            }
        }
    }
But how can I make CallbackEmitLoop start in the background? Or any other solution for this?
Update 1
I do not need the dispather timer because is tighten with wpf and maybe for "timer" things I should use synchronization context. And I don't have problems with calling to my collection from others context because collection can be made concurrency ready. I need something like a valve that would restrict invoking delegates once they have been added. So how I described problem above I can get a lot of "updates"(delegates) at one time and if I just apply them(call delegates) the ui thread would be busy significant time that will cause freezing and because of this I somehow should keep times before apply next "update".