Я вижу онлайн, что это говорит, что я использую myThread.Join();
когда я хочу заблокировать свой поток, пока другой поток не заканчивается. (Одна из вещей, которые я не получаю об этом, что, если у меня есть несколько потоков).
Но обычно, я просто не добираюсь, когда я использовал бы .Join()
или условие, для которого это полезно. Кто-либо может объяснить это мне как, я - четвероклассник? Очень простое объяснение для понимания получит мой голос ответа.
Join удостоверится, что шаги выше строки выполняются перед выполняющимися строками ниже.
Другой пример, когда Ваш рабочий поток скажем, читает из входного потока, в то время как метод чтения может работать навсегда и Вы хотите так или иначе избежать этого - путем применения тайм-аута с помощью другого сторожевого потока:
// worker thread
var worker = new Thread(() => {
Trace.WriteLine("Reading from stream");
// here is the critical area of thread, where the real stuff happens
// Sleep is just an example, simulating any real operation
Thread.Sleep(10000);
Trace.WriteLine("Reading finished");
}) { Name = "Worker" };
Trace.WriteLine("Starting worker thread...");
worker.Start();
// watchdog thread
ThreadPool.QueueUserWorkItem((o) => {
var timeOut = 5000;
if (!worker.Join(timeOut))
{
Trace.WriteLine("Killing worker thread after " + timeOut + " milliseconds!");
worker.Abort();
}
});
Добавление задержки 300 мс в методе "Образец" и задержка 400 мс в "Sample2" из сообщения devopsEMK помогло бы понять.
Таким образом можно заметить это путем удаления комментария из "thread1. Соединение ()"; строка, основной поток ожидает "thread1" для завершения и только после шагов.