@Almost

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

Здравствуйте.

Есть компонент:

public class TestComponent : MonoBehaviour
	{
		event Action Action;
		
		void Start()
		{
			Action += Function1;
			Action += Function2;
			Action += Function3;
			
			Action?.Invoke();
		}

		void Function1()
		{
			Debug.Log(1);
		}

		void Function2()
		{
			Debug.Log(2);

			Action -= Function3;
		}

		void Function3()
		{
			Debug.Log(3);
		}
	}


Вывод:

1
2
3

Вопросы:

1) Почему Function3 метод вызывается?
2) Как сделать, чтобы Function3 метод не вызывался, если мы отписали его в событии во время вызова события в методе Function2? Иначе переформулировав - как сделать, чтобы в выводе было 1 и 2.
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Invoke сохраняет список делегатов во временный массив и вызывает их, в качестве защиты от такого кода. Меняйте логику.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы