Я не могу поместить логику потоков в метод Run, метод run выполняет много операций в базе данных.
как это:
void Run()
{
while (true)
{
InsertEntitiesA();
DeleteEntitiesA();
UpdateEntitiesA();
InsertEntitiesB();
DeleteEntitiesB();
UpdateEntitiesB();
InsertEntitiesC();
DeleteEntitiesC();
UpdateEntitiesC();
}
}
если я приостановил его, и поток на DeleteEntitiesB(), я хочу, чтобы он остановился там, а затем, когда я возобновляю, я хочу, чтобы он начинался с того места, где он был остановлен, DeleteEntitiesB() на линии был остановлен.
есть ли способ его выполнить?
я не думаю, что есть = (
Ps: Как я сказал, метод Run не может быть изменен
Вы можете сделать это, используя Thread.Suspend и Thread.Resume, но это, как правило, очень плохая идея. Поскольку вы не знаете, где поток выполняется, когда вы их называете, вы не представляете, во что-то критическое. Если это происходит во что-то критическое, всевозможные хаосы могут возникнуть, вероятно, именно поэтому Microsoft решила устаревать методы.
Это не может быть сделано без сотрудничества нитей. Что произойдет, если вы приостановите поток, пока он держит критический замок? Что делать, если он содержит блокировку, которую поток, который собирается отказаться от него, нуждается?