У меня есть приложение на .NET Framework 4.7.2, которое включает функцию сценариев: приложение включает в себя простую среду IDE, в которой пользователи могут писать свои собственные сценарии и запускать их в одном из пространств имен, используемых приложением, так что они могут использовать свои сценарии для автоматизации действий в приложении.
Мы включили кнопку «Остановить сценарий», которая запускала .Прервать поток, в котором запускался сценарий, что полезно на случай, если они случайно запустили сценарий. создавать сценарии с бесконечным циклом или если они хотят по какой-либо причине прервать их выполнение на полпути.
Это отлично сработало, но потом мы начали мигрировать приложение на .NET, и теперь мы не можем использовать .Прервать больше.
Как лучше всего заменить функцию «Остановить сценарий» в .NET? Некоторые варианты, которые мы рассмотрели:
Рекомендуемый способ прервать потоки и задачи в .NET — использовать токены CancellationTokens, но это означает, что нашим пользователям придется включать эти проверки в их скриптах. Мы не хотим полагаться на то, что они это сделают (они не программисты), и мы не хотим заставлять их переделывать все существующие сценарии, поэтому мы не хотим этого делать.
Компиляция сценария в двоичный файл и запуск его в отдельном потоке может сработать, но мы потеряем возможность совместного использования пространства имен приложения со сценариями.
Я сделал это слышал о ApplicationDomains, но, видимо, даже если вы их выгрузите, потоки все равно будут выполняться до тех пор, пока не закончатся, так что это не решение.
Я рассматривал возможность использования плетения для внедрения проверок CancellationTokens, но я Никогда не пользовалась плетением и не знаю, возможно ли это вообще или излишне.
У меня есть приложение на .NET Framework 4.7.2, которое включает функцию сценариев: приложение включает в себя простую среду IDE, в которой пользователи могут писать свои собственные сценарии и запускать их в одном из пространств имен, используемых приложением, так что они могут использовать свои сценарии для автоматизации действий в приложении. Мы включили кнопку «Остановить сценарий», которая запускала .Прервать поток, в котором запускался сценарий, что полезно на случай, если они случайно запустили сценарий. создавать сценарии с бесконечным циклом или если они хотят по какой-либо причине прервать их выполнение на полпути. Это отлично сработало, но потом мы начали мигрировать приложение на .NET, и теперь мы не можем использовать .Прервать больше. Как лучше всего заменить функцию «Остановить сценарий» в .NET? Некоторые варианты, которые мы рассмотрели: [list] [*]Рекомендуемый способ прервать потоки и задачи в .NET — использовать токены CancellationTokens, но это означает, что нашим пользователям придется включать эти проверки в их скриптах. Мы не хотим полагаться на то, что они это сделают (они не программисты), и мы не хотим заставлять их переделывать все существующие сценарии, поэтому мы не хотим этого делать. [*]Компиляция сценария в двоичный файл и запуск его в отдельном потоке может сработать, но мы потеряем возможность совместного использования пространства имен приложения со сценариями. [*]Я сделал это слышал о ApplicationDomains, но, видимо, даже если вы их выгрузите, потоки все равно будут выполняться до тех пор, пока не закончатся, так что это не решение. [*]Я рассматривал возможность использования плетения для внедрения проверок CancellationTokens, но я Никогда не пользовалась плетением и не знаю, возможно ли это вообще или излишне. [/list]