Многопоточность: Когда я использовал бы Соединение?

Я вижу онлайн, что это говорит, что я использую myThread.Join(); когда я хочу заблокировать свой поток, пока другой поток не заканчивается. (Одна из вещей, которые я не получаю об этом, что, если у меня есть несколько потоков).

Но обычно, я просто не добираюсь, когда я использовал бы .Join() или условие, для которого это полезно. Кто-либо может объяснить это мне как, я - четвероклассник? Очень простое объяснение для понимания получит мой голос ответа.

62
задан 22 June 2014 в 19:47

3 ответа

Join удостоверится, что шаги выше строки выполняются перед выполняющимися строками ниже.

3
ответ дан 31 October 2019 в 14:01

Другой пример, когда Ваш рабочий поток скажем, читает из входного потока, в то время как метод чтения может работать навсегда и Вы хотите так или иначе избежать этого - путем применения тайм-аута с помощью другого сторожевого потока:

// 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();
    }
});
1
ответ дан 31 October 2019 в 14:01

Добавление задержки 300 мс в методе "Образец" и задержка 400 мс в "Sample2" из сообщения devopsEMK помогло бы понять.

Таким образом можно заметить это путем удаления комментария из "thread1. Соединение ()"; строка, основной поток ожидает "thread1" для завершения и только после шагов.

0
ответ дан 31 October 2019 в 14:01

Другие вопросы по тегам:

Похожие вопросы: