Я работаю над С# API, который используется различными потребителями. Этот API обеспечивает доступ к совместно используемому ресурсу (в моем случае аппаратное обеспечение, которое выполняет последовательную связь), в котором часто бывают несколько разных участников, пытающихся использовать его одновременно.
Проблема заключается в том, что некоторые из моих потребителей захотят использовать это в многопоточной среде - каждый актер работает независимо и пытается использовать этот ресурс. Здесь легко работает простой замок. Но некоторые из моих потребителей предпочли бы использовать async-wait и time-slice ресурс. (Как я понимаю) для этого требуется асинхронная блокировка для возврата времени к другим задачам; блокировка блокировки остановит весь поток.
И я полагаю, что в лучшем случае наличие несовместимых серийных замков и потенциальное состояние гонки или тупик в худшем случае.
Итак, как я могу защитить этот общий ресурс в общей кодовой базе для как потенциальных concurrency обычаев?