В большинстве языков, включая C #, методы в сигнатуре класса биективно соответствуют коду их реализаций - для каждого объявленного метода существует единственное, четкое определение того, что происходит, когда этот метод называется. Однако в Cω тело может быть связано с набором (синхронных и / или асинхронных) методов. Мы называем такое определение аккордом, и конкретный метод может появиться в заголовке нескольких аккордов. Тело аккорда может быть выполнено только после вызова всех методов в его заголовке. Таким образом, при вызове метода могут быть включены ноль, один или несколько аккордов:
Если аккорд не включен, то метод
вызов поставлен в очередь. Если метод
асинхронный, то это просто
включает в себя добавление аргументов (
содержимое сообщения) в очередь.
Если метод является синхронным, то
вызывающий поток заблокирован. Если там
один включенный аккорд, то
аргументы звонков, участвующих в
матч исключен, любой заблокирован
нить, участвующая в матче
проснулся, и тело бежит. Когда
аккорд, который включает в себя только асинхронный
методы запускаются, то в новом
нить. Если есть несколько аккордов
которые включены, то не указано
один из них выбран для запуска.
Точно так же, если есть несколько звонков
к определенному методу в очереди, мы
не указывайте, какой звонок будет
в очереди, когда есть совпадение.