Ответ 1
К сожалению, вы не можете fork
на С#, как в C на совместимых с POSIX операционных системах.
У вас есть несколько вариантов. Поскольку вы просто пытаетесь защитить от бесконечных циклов, вы можете просто создать новый Thread
(новый, а не ThreadPool
один или Task
). Затем вы можете вызвать Abort
в потоке, если вам нужно его убить. Это вызовет ThreadAbortException
в другом потоке.
Другой вариант - AppDomain
. Вы можете создать новый AppDomain
с помощью текущей запущенной сборки относительно тривиально. Затем вы делаете вызов в прокси-объект, который фактически существует через домена. Прокси-сервер будет использовать удаленную удаленную платформу для старой школы .NET, чтобы вызвать метод на реальном объекте (так что нет общего прохода и т.д., Поскольку вы ограничены конструкциями на основе .NET 1.1).
Помните, что ни одна из вышеперечисленных стратегий не защитит вас от сбоя в неуправляемом коде. Поскольку AppDomains - управляемая конструкция, вы не можете использовать их для отмены неуправляемых зависаний.
Если вы действительно действительно настроены на получение второго процесса на уровне ОС, вы также можете генерировать новую исполняемую сборку во временном файле на лету и запускать ее в новом процессе. См. здесь статью MSDN о генерации новой сборки. Имейте в виду, что это вообще не тривиально.