Поток. Прерывание для остановки длинного сна на завершении работы приложения - Является там лучшим подходом

Object.prototype.toString.call(myVar) вернет:

  • "[object Object]", если myVar - объект
  • "[object Array]", если myVar - массив
  • и т. Д.

Для получения дополнительной информации об этом и почему это хорошая альтернатива typeof, ознакомьтесь с этой статьей .

5
задан Steffen 17 July 2009 в 06:09
поделиться

3 ответа

Есть способ лучше - либо использовать Monitor.Wait / Pulse вместо Sleep / Interrupt, либо использовать Auto ] / ManualResetEvent . (В этом случае вам, вероятно, понадобится ManualResetEvent .)

Лично я фанат Wait / Pulse, вероятно, из-за того, что это похоже на механизм Java wait () / notify (). Однако бывают случаи, когда события сброса более полезны.

Ваш код будет выглядеть примерно так:

private readonly object padlock = new object();
private volatile bool stopping = false;

public void Stop() // Could make this Dispose if you want
{
    stopping = true;
    lock (padlock)
    {
        Monitor.Pulse(padlock);
    }
}

private void ThreadedWork()
{
    while (!stopping)
    {
        DoWork();
        lock (padlock)
        {
            Monitor.Wait(padlock, TimeSpan.FromMinutes(15));
        }
    }
}

Для получения дополнительных сведений см. Мое руководство по потокам , в частности, страницы на взаимоблокировки, ожидания и пульсации , страница на обрабатывает ожидание . У Джо Альбахари также есть учебное пособие , которое охватывает те же темы и сравнивает их.

Я еще не рассматривал подробно, но не стал бы '

14
ответ дан 18 December 2019 в 09:52
поделиться

Вы можете использовать событие, чтобы проверить, должен ли процесс заканчиваться следующим образом:

var eventX = new AutoResetEvent(false);
while (true)
{
    if(eventX.WaitOne(900000, false))
    {
        break;
    }
    DoWork();
}
2
ответ дан 18 December 2019 в 09:52
поделиться

Одним из способов может быть добавление события отмены или делегата, на который будет подписан поток. Когда вызывается событие отмены, поток может остановиться.

0
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

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