Как выполнить сценарии PowerShell в C # с помощью библиотеки параллельных задач - PullRequest
3 голосов
/ 21 апреля 2011

В настоящее время я выполняю сценарии PowerShell следующим образом:

internal void RunScript(PowerShell powerShell, Runspace runspace, Script script, IDictionary parameters = null, Action<ICollection<PSObject>> callback = null)
    {
        SetupScriptRun(powerShell, runspace, script, parameters);

        powerShell.BeginInvoke(new PSDataCollection<PSObject>(), null, psCallback =>
        {
            ICollection<PSObject> results = powerShell.EndInvoke(psCallback);
            LogWarningsAndErrors(powerShell, runspace, script, parameters);
            if (callback != null)
            {
                callback(results);
            }
        }, null);
    }

Я бы хотел обернуть этот код модели асинхронного программирования (APM) в задачу, как описано здесь:

TPL и традиционное .NET асинхронное программирование

Я пытался создать задачу, используя следующий метод, но я не могу понять, какими должны быть параметры:

var task = System.Threading.Tasks.Task.Factory.FromAsync<PSDataCollection<PSObject>>(???);

Как я могу обернуть методы BeginInvoke / EndInvoke в задачу?

1 Ответ

0 голосов
/ 24 апреля 2011

Я использовал не асинхронный вызов Powershell Invoke () следующим образом:

internal Task RunScript(PowerShell powerShell, Runspace runspace, Script script, IDictionary parameters = null, Action<ICollection<PSObject>> callback = null, object state = null)
    {
        SetupScriptRun(powerShell, runspace, script, parameters);

        return Task.Factory.StartNew<ICollection<PSObject>>((o) =>
            {
                var results = powerShell.Invoke();
                LogWarningsAndErrors(powerShell, runspace, script, parameters);

                if (callback != null)
                {
                    callback(results);
                }

                return results;
            }, state);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...