собственно вопрос в том, как прибить запущенный скрипт?
вариант 1 — передавать CancelationToken? но я не хочу внутри скрипта писать — while(token.IsCancellationRequested)...
вариант 2 — создать доп thread в котором запустить выполнение скрипта и заабортить его — что тоже не кашерно думаю
Задача — остановить \ пришибить исполнение скрипта (не важно на какой стадии он работает), есть другие способы ?
ps пока склоняюсь к new Threadи прибивать, т.к если много скриптов на await будет висеть я буду забивать ThreadPool
C>Задача — остановить \ пришибить исполнение скрипта (не важно на какой стадии он работает), есть другие способы ?
Несмотря на очевидную ненадёжность в настоящее время каноничен только CancelationToken. Про Thread.Abort написали столько статей-пугалок что совсем испугались и убрали его из .NET Core. Если задача ненадёжная — всё ещё можно вынести её в отдельный процесс и в случае чего убить процесс целиком.
Здравствуйте, hi_octane, Вы писали:
C>>Задача — остановить \ пришибить исполнение скрипта (не важно на какой стадии он работает), есть другие способы ? _>Несмотря на очевидную ненадёжность в настоящее время каноничен только CancelationToken. Про Thread.Abort написали столько статей-пугалок что совсем испугались и убрали его из .NET Core. Если задача ненадёжная — всё ещё можно вынести её в отдельный процесс и в случае чего убить процесс целиком.
в Microsoft.NETCore.App/2.1.5 вроде как есть аборт
хотя я ошибся
throw new PlatformNotSupportedException(SR.PlatformNotSupported_ThreadAbort);
прошло некоторое время...
в net core есть thread.Interrupt его и использую,т.к перспектива выносить в отдельный процесс не очень.
C>в net core есть thread.Interrupt его и использую,т.к перспектива выносить в отдельный процесс не очень.
Ну Thread.Interrupt настолько ускоспециализированный, что его применение возможно только для очень частных случаев.
Здравствуйте, Danchik, Вы писали:
D>Здравствуйте, codenet, Вы писали:
C>>Привет.
C>>хотел пощупать roslyn и наткнулся на одну проблему. C>>у меня есть скрип который я запускаю
C>>
C>>собственно вопрос в том, как прибить запущенный скрипт?
D>Самое правильное передать таки токен и не писать Threda.Sleep(1000), а await Task.Delay(1000, token)
А если скрипт напишет Вася который о токенах не знает ничего, я скажу ctx.Cancel() из менеджера которое
управляет скриптами, а Васин скрипт продолжит работать т.к он не будет проверять на каждом шаге своего скрипта
на кэнселейшен токен.