public static Task <NKScriptContext> createContext(Dictionary <string, object> options = null)
        {
            syncContext = new SingleThreadSynchronizationContext();

            Task.Factory.StartNew(() => { syncContext.RunOnCurrentThread(); }, TaskCreationOptions.LongRunning);
            var oldSyncContext = SynchronizationContext.Current;

            SynchronizationContext.SetSynchronizationContext(syncContext);
            var taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();

            SynchronizationContext.SetSynchronizationContext(oldSyncContext);

            syncContext.Post((s) => { }, null);

            return(Task.Factory.StartNew(() =>
            {
                if (options == null)
                {
                    options = new Dictionary <string, object>();
                }

                if (!runtimeCreated)
                {
                    runtime = JavaScriptRuntime.Create(JavaScriptRuntimeAttributes.None, JavaScriptRuntimeVersion.VersionEdge, null);
                    runtimeCreated = true;
                }

                var chakra = runtime.CreateContext();
                int id = NKScriptContextFactory.sequenceNumber++;
                var context = new NKSChakraContext(id, chakra, options);

                var item = new Dictionary <String, object>();
                NKScriptContextFactory._contexts[id] = item;
                item["JSVirtualMachine"] = runtime;   // if future non-shared runtimes required;
                item["context"] = context;

                return context.completeInitialization();
            }, Task.Factory.CancellationToken, TaskCreationOptions.LongRunning, taskScheduler).Unwrap());
        }
        public static Task<NKScriptContext> createContext(Dictionary<string, object> options = null)
        {

            syncContext = new SingleThreadSynchronizationContext();

            Task.Factory.StartNew(() => { syncContext.RunOnCurrentThread(); }, TaskCreationOptions.LongRunning);
            var oldSyncContext = SynchronizationContext.Current;
            SynchronizationContext.SetSynchronizationContext(syncContext);
            var taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
            SynchronizationContext.SetSynchronizationContext(oldSyncContext);

            syncContext.Post((s) => { }, null);

            return Task.Factory.StartNew(() =>
             {
                 if (options == null)
                     options = new Dictionary<string, object>();

                 if (!runtimeCreated)
                 {
                     runtime = JavaScriptRuntime.Create(JavaScriptRuntimeAttributes.None, JavaScriptRuntimeVersion.VersionEdge, null);
                     runtimeCreated = true;
                 }

                 var chakra = runtime.CreateContext();
                 int id = NKScriptContextFactory.sequenceNumber++;
                 var context = new NKSChakraContext(id, chakra, options);

                 var item = new Dictionary<String, object>();
                 NKScriptContextFactory._contexts[id] = item;
                 item["JSVirtualMachine"] = runtime;  // if future non-shared runtimes required;
                 item["context"] = context;

                 return context.completeInitialization();
             }, Task.Factory.CancellationToken, TaskCreationOptions.LongRunning, taskScheduler).Unwrap();
        }
 internal NKSChakraScriptDelegate(NKSChakraContext context)
 {
     this.context = context;
 }