Будет ли зацикливание Thread.Sleep () плохим для производительности, когда используется для приостановки потока?
Существует (или было) много разговоров о том, хорошо или плохо использоватьThread.Sleep()
метод. Из того, что я понимаю, это в основном для отладки.
Теперь я задаюсь вопросом: это плохо использовать для моей конкретной цели, то есть постоянно зацикливать его, чтобы иметь возможность приостановить / возобновить поток? Я делаю это потому, что хочу приостановить поток, который выполняет операции ввода-вывода, и иметь возможность возобновить его простым способом.
Операции ввода / вывода - это просто запись блоков размером 4096 байт в файл до тех пор, пока в него не будут записаны все данные. Поскольку файл может быть большим и занимать много времени, я хочу иметь возможность приостановить операцию (в случае, если он начнет потреблять много системных ресурсов).
Мой код, версия VB.NET:
'Class level.
Private BytesWritten As Long = 0
Private Pause As Boolean = False
'Method (thread) level.
While BytesWritten < [target file size]
...write 4096 byte buffer to file...
While Pause = True
Thread.Sleep(250)
End While
...do some more stuff...
End While
C # эквивалент:
//Class level.
long bytesWritten = 0;
bool pause = false;
//Method (thread) level.
while(bytesWritten < [target file size]) {
...write 4096 byte buffer to file...
while(pause == true) {
Thread.Sleep(250);
}
...do some more stuff...
}
Я слышал о ResetEvents и немного знаю о том, что они делают, но я никогда особо не разбирался в них.