На самом деле, похоже, нет большого объяснения по этому поводу, очевидно, но коды выхода должны использоваться для указания того, как поток завершился, 0
как правило, означает, что он завершился безопасно, в то время как все остальное имеет тенденцию означать, что это не так. Не выхожу, как ожидалось. Но тогда этот код выхода можно задать самостоятельно, чтобы полностью игнорировать это.
Ближайшая ссылка для получения дополнительной информации, которую я могу найти, - это
Цитата из ссылки выше:
Каким бы ни был метод выхода, целое число, которое вы возвращаете из своего процесса или потока, должно быть значениями от 0 до 255 (8 бит). Нулевое значение указывает на успех, а ненулевое значение указывает на неудачу. Хотя вы можете попытаться вернуть любое целочисленное значение в качестве кода выхода, только младший байт целого числа возвращается из вашего процесса или потока как часть кода выхода. Байты более высокого порядка используются операционной системой для передачи специальной информации о процессе. Код выхода очень полезен в пакетных программах / программах оболочки, которые условно выполняют другие программы в зависимости от успеха или неудачи одной.
Из документации для GetEXitCodeThread
Важно. Функция GetExitCodeThread возвращает действительный код ошибки, определенный приложением, только после завершения потока. Следовательно, приложение не должно использовать STILL_ACTIVE (259) в качестве кода ошибки. Если поток возвращает STILL_ACTIVE (259) в качестве кода ошибки, приложения, которые проверяют это значение, могут интерпретировать это как означающее, что поток все еще работает, и продолжают проверку завершения потока после его завершения, что может привести к приложение в бесконечный цикл.
Насколько я понимаю, код выхода не имеет большого значения, если вы используете потоки в своем собственном приложении для своего собственного приложения. Исключением может быть ситуация, когда вы одновременно запускаете несколько потоков, которые зависят друг от друга. Если требуется, чтобы внешний источник прочитал этот код ошибки, вы можете настроить его так, чтобы другие приложения знали статус вашего потока.
RunAsync().Wait();
static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }
Дело в том, что задачи выполняются потоками пула потоков, и на основе эвристики пула потоков он может не завершить поток даже после завершения вашей задачи. Поток просто возвращается в пул потоков, ожидающих назначения следующей задачи. Вот почему код выхода STILL_ACTIVE (259) звучит здесь так интуитивно.Как упоминал Сэйз, код выхода
259 (0x103)
имеет особое значение, в этом случае отлаживаемый процесс все еще работает.Я часто видел это при отладке веб-служб, потому что поток продолжает работать после выполнения каждого вызова веб-службы (поскольку он все еще ожидает дальнейших вызовов).
источник
со мной случилось то, что в моем решении есть несколько проектов. Я хотел отладить проект 1, однако проект 2 был установлен как начальный проект по умолчанию. Я исправил это, щелкнув правой кнопкой мыши по проекту и выбрав «Установить как запускаемый проект», после чего отладить все в порядке.
источник