У меня есть объект A, из которого я хочу выполнить новый поток с помощью метода B объекта. Я могу использовать Task.CreateNew и т. Д. Проблема в том, что я не знаю, как обрабатывать исключение в новом потоке.Обработка исключений для отдельных потоков
Вообще то, что я хочу, чтобы внутренняя резьба с помощью метода объекта B бросить исключение, которое родительский объект будет поймать и закрыть это исполнение, наряду с объектом В.
я не могу добавить код главного контура на всех
ловли исключение после того, как основной петли сделано не приемлемо, я хочу, чтобы поймать внутреннее исключение резьбы по времени это происходит
Есть ли способ достичь этого?
В коде ниже я не имею обработки исключений и мастер-нить продолжает:
static void Main()
{
Console.WriteLine("start");
Task.Factory.StartNew(PrintTime, CancellationToken.None);
for (int i = 0; i < 20; i++)
{
Console.WriteLine("master thread i={0}", i + 1);
Thread.Sleep(1000);
}
}
private static void PrintTime()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("inner thread i={0}",i+1);
Thread.Sleep(1000);
}
throw new Exception("exception");
}
Это означает, что главный поток должен завершиться, чтобы проверить исключения, в то время как я хочу прекратить любую нить при исключении внутренней нити – eugeneK
@eugeneK: Я отредактировал свой ответ, чтобы остановить повторение в случае внутреннего исключения. Это может быть дополнительно улучшено, чтобы остановить основной поток еще до того, как задержка в 1000 миллисекунд затянется. – Douglas
Я не могу изменить мастер-петлю, хотя, – eugeneK