public async Task CreateRunspacePool()

in dotNet/PsEdge/PsEdge.cs [37:77]


        public async Task<object> CreateRunspacePool(object input)
        {
            var inputDict = input as IDictionary<string, object>;
            if (inputDict == null)
            {
                throw new ArgumentException("input");
            }

            var runspaceKey = (string) inputDict["RunspaceKey"];
            var startupScript = (string) inputDict["StartupScript"];

            if (runspacePools.ContainsKey(runspaceKey))
            {
                throw new InvalidOperationException("Runspace already created with key" + runspaceKey);
            }

            if (string.IsNullOrEmpty(startupScript))
            {
                // Assign a dummy script if not provided.
                startupScript = "Out-Null";
            }

            var initialState = InitialSessionState.CreateDefault();

            var promptHandler = (Func<object, Task<object>>)inputDict["PromptHandler"];
            PSEdgeRawUI rawUI = new PSEdgeRawUI();
            PSEdgeHostUI hostUI = new PSEdgeHostUI(rawUI, promptHandler);

            PSEdgeHost host = new PSEdgeHost(hostUI);

            // inject the startup script in the runspace so it is invoked automatically.
            initialState.Variables.Add(
                new SessionStateVariableEntry("orbPrivate_RunspaceStartupScript", startupScript,"", ScopedItemOptions.AllScope));

            var runspace = RunspaceFactory.CreateRunspacePool(MinRunspacesPerKey, MaxRunspacesPerKey, initialState, host);

            await Task.Factory.FromAsync(runspace.BeginOpen, runspace.EndOpen, null);
            runspacePools[runspaceKey] = runspace;

            return true;
        }