Сегодня я играл с моим проектом и нашел интересный небольшой фрагмент, учитывая следующий шаблон, вы можете безопасно очистить поток, даже если он вынужден закрываться рано. Мой проект - это сетевой сервер, на котором создается новый поток для каждого клиента. Я нашел это полезным для раннего завершения с удаленной стороны, но также и с локальной стороны (я могу просто позвонить .Abort()
из моего кода обработки).
Есть ли какие-либо проблемы, с которыми вы можете столкнуться, или какие-либо предложения, которые вы могли бы сделать для тех, кто рассматривает подобный подход?
Контрольный пример следующий:
using System;
using System.Threading;
class Program
{
static Thread t1 = new Thread(thread1);
static Thread t2 = new Thread(thread2);
public static void Main(string[] args)
{
t1.Start();
t2.Start();
t1.Join();
}
public static void thread1() {
try {
// Do our work here, for this test just look busy.
while(true) {
Thread.Sleep(100);
}
} finally {
Console.WriteLine("We're exiting thread1 cleanly.\n");
// Do any cleanup that might be needed here.
}
}
public static void thread2() {
Thread.Sleep(500);
t1.Abort();
}
}
Для справки, без блока try / finally поток просто умирает, как и следовало ожидать.