diff --git a/src/AngleSharp.Js/Dom/MessageChannel.cs b/src/AngleSharp.Js/Dom/MessageChannel.cs index 7421424..e3ab158 100644 --- a/src/AngleSharp.Js/Dom/MessageChannel.cs +++ b/src/AngleSharp.Js/Dom/MessageChannel.cs @@ -557,13 +557,27 @@ public static void Enqueue(IDocument document, Action action) if (loop != null) { - loop.Enqueue(action, TaskPriority.Normal); + loop.Enqueue(_ => Execute(document, action), TaskPriority.Normal); return; } Queues.GetValue(document, static _ => new TaskQueue()).Enqueue(document, action); } + private static void Execute(IDocument document, Action action) + { + var scripting = document.Context?.GetService(); + + if (scripting != null) + { + scripting.GetOrCreateInstance(document).RunTask(action); + } + else + { + action(); + } + } + private sealed class TaskQueue { private readonly Queue _actions = new Queue(); @@ -620,16 +634,7 @@ private void Run(IDocument document) try { - var scripting = document.Context?.GetService(); - - if (scripting != null) - { - scripting.GetOrCreateInstance(document).RunTask(action); - } - else - { - action(); - } + Execute(document, action); } catch (Exception error) {