0

У меня есть многопоточная программа, и при вызове метода Abort() или Suspend(), компилятор выбрасывает PlatformNotSupportedException. Есть ли другие короткие способы приостановить поток? C# 11, .NET 7.0

aepot
  • 49,560
bebra
  • 9
  • 2
  • 1
    2-я ссылка гугла по запросу c# thread abort. Советую научится искать информацию самостоятельно, ведь это основа основ любого программиста. – EvgeniyZ Dec 24 '22 at 12:04
  • Зарегистрируйте нормальный аккаунт на StackOverflow. Здесь принято отвечать на вопросы в комментариях. А вы задаете вопрос и тут же забрасываете его. Зачем тогда задавать? Люди пишут ответы, время тратят, для чего? Я написал ответ, реакции ноль. Пришлось удалить. – aepot Dec 29 '22 at 12:34

1 Answers1

0

Это ожидаемое поведение, Suspend() вызывает PlatformNotSupportedException всегда для .NET Core и .NET 5+.

Вместо этого нужно использовать AutoResetEvent:

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

autoResetEvent.Set();

В потоке соответственно использовать:

autoResetEvent.WaitOne();

Еще об этом посмотрите здесь

demonplus
  • 878
  • AutoResetEvent - штука мощная и тяжелая, и не поддерживает асинхронное ожидание. Есть более легковесные примитивы синхронизации, например ManualResetEventSlim или SemaphoreSlim, последний поддерживает асинхронность. – aepot Dec 24 '22 at 12:41
  • @aepot SemaphoreSlim прекрасная вещь, это же пример просто – demonplus Dec 25 '22 at 08:00