Как приостановить и возобновить поток без использования логики потоков в нем

Вопрос:

Я не могу поместить логику потоков в метод Run, метод run выполняет много операций в базе данных.

как это:

void Run()
{
while (true)
{
InsertEntitiesA();
DeleteEntitiesA();
UpdateEntitiesA();

InsertEntitiesB();
DeleteEntitiesB();
UpdateEntitiesB();

InsertEntitiesC();
DeleteEntitiesC();
UpdateEntitiesC();
}
}

если я приостановил его, и поток на DeleteEntitiesB(), я хочу, чтобы он остановился там, а затем, когда я возобновляю, я хочу, чтобы он начинался с того места, где он был остановлен, DeleteEntitiesB() на линии был остановлен.

есть ли способ его выполнить?

я не думаю, что есть = (

Ps: Как я сказал, метод Run не может быть изменен

Ответ №1

Вы можете сделать это, используя Thread.Suspend и Thread.Resume, но это, как правило, очень плохая идея. Поскольку вы не знаете, где поток выполняется, когда вы их называете, вы не представляете, во что-то критическое. Если это происходит во что-то критическое, всевозможные хаосы могут возникнуть, вероятно, именно поэтому Microsoft решила устаревать методы.

Ответ №2

Это не может быть сделано без сотрудничества нитей. Что произойдет, если вы приостановите поток, пока он держит критический замок? Что делать, если он содержит блокировку, которую поток, который собирается отказаться от него, нуждается?

Оцените статью
TechArks.Ru
Добавить комментарий