Я решил проблему с похожей ситуацией (то есть необходимость знать, вызывался ли A непосредственно перед C), просто установив конечный автомат. По сути, я построил объект состояния, используя enum и свойство для управления / запроса состояния.
Когда мой эквивалент A () был вызван, он сохранял бы часть бизнес-логики из состояния, указывающего, что вызывался A. Если бы вызывались другие методы (ваши B), это переключало бы состояние в одно из нескольких других состояний (моя ситуация была немного более сложной), а затем, когда вызывался C (), запрашивался кусок бизнес-логики, чтобы определить, собирались вызвать некоторый метод D (), который содержал функциональность «только если A только что вызвали».
Я подозреваю, что есть несколько способов решения этой проблемы, но мне понравился подход конечного автомата, который я выбрал, потому что он позволил мне расширить то, что первоначально было двоичной ситуацией, для обработки более сложной ситуации с несколькими состояниями.
Мне повезло, что многопоточность не была проблемой в моем случае, потому что это делает вещи более увлекательными, но конечный автомат, вероятно, будет работать и в этом сценарии.
Только мои два цента.