Как прервать написанный пользователем скрипт? - PullRequest
1 голос
/ 10 апреля 2019

Попытка запустить скрипт (используя Roslyn Scripting API ):

var source = "while(true) { }";
return CSharpScript.EvaluateAsync(source).Result;

Он будет работать вечно.Как это прервать?

Я не возражаю против использования другого скриптового движка, хотя запрашивать его не по теме.Я нашел похожие вопросы ( пример ), но они бесполезны.

Справочная информация: Я хочу добавить поддержку пользовательских сценариев C # в свое программное обеспечение.Я хочу запускать сценарии в песочнице, поэтому возможность прерывать сценарии жизненно необходима.В прошлом у меня был некоторый опыт работы с CodeDOM , но я также не смог найти способ прервать там сценарии.

Мысли:

  • Я мог бы предварительно обработатьПользовательский текст и вставьте мой код (проверяет CancellationToken и return/throw) после каждой строки.Но приведенный выше пример невосприимчив к такой технике, и я должен был бы пройти сложный путь синтаксического анализатора (не имею опыта, мысли?).
  • Я мог бы предоставить метод, который пользователь должен явновызывать в своем скрипте проблемные места (например, внутри циклов), но пользователь может просто решить игнорировать это.
  • Есть ли способ запустить скрипт пошагово?Режим песочницы-отладчика?Тогда я смогу проверить внешний запрос на завершение сценария и остановку отладки.

Каковы другие возможности?Кто-нибудь уже реализовал безопасный пользовательский сценарий?

...