Вообщем, я вообще более менее(скорее менее) аспер но нам по универу задали для того чтоб ооп проверить сделать ооп консольную игру, ну и я поскольку с многопоточностью только около async await разбирался только решил задеть многопоточность тоже,ну и поучить.Вот у меня допустим в игре есть такая штука что игрок может разбить блок под собой и он восстановится через 3 секунды.Реализовал я это как дополнительный поток который слипается на 3 секунды и после этих 3х секунд соответственно ставит блок обратно на место там где игрок его разбил. Прикол в том что также в этом потоке описан случай когда экземпляр игрока находится внутри блока который вскоре должен восстановиться(очевидно игрок перемещается в основном потоке) и в таком случае если игрок не успевает выбраться - он погибает, и вот на этом этапе я бы хотел из дополнительного потока потока вызвать некий метод new Controller.OnPlayerKilled(данный метод по идее пока что заканчивает игру(программу), а основной поток абортнуть. Решил я это дело пока что тем что в основных частях программы в основном потоке(в конструкторе контроллера и View) проверяю флаг Player.IsKilled(он выставляется в дополнительном потоке) и если он тру соответственно заканчиваю программу. А вот по-другому и не знаю как. Такие дела
Всё правильно, примерно так они и должны общаться. Там может быть много комментариев к абстракции и к тому, что по-хорошему это на других примитивах должно делаться, но когда мы это всё выкидываем пушо это просто вводная задача - всё правильно, основной поток работает и проверяет, может ли он продолжить работу, дополнительный поток через флаг сообщает ему, что наступила критическая ситуация.