¿Cómo proteger los recursos que pueden usarse en un entorno multihebra o asíncrono?

Estoy trabajando en una API de C # que es utilizada por una variedad de consumidores. Esta API proporciona acceso a un recurso compartido (en mi caso, el hardware que realiza la comunicación en serie), que a menudo tendrá algunos actores diferentes que intentan usarlo simultáneamente.

El problema que tengo es que algunos de mis consumidores querrán usar esto en un entorno de subprocesos múltiples: cada actor trabaja de forma independiente e intenta usar el recurso. Una simple cerradura funciona bien aquí. Pero algunos de mis consumidores preferirían usar async-await y el segmento de tiempo. (Como lo entiendo) esto requiere un bloqueo asíncrono para devolver el intervalo de tiempo a otras tareas; Bloquear en una cerradura detendría todo ese hilo.

Y me imagino que tener bloqueos en serie no funciona en el mejor de los casos, y una condición potencial de carrera o un punto muerto en el peor.

Entonces, ¿cómo puedo proteger este recurso compartido en una base de código común para ambos usos potenciales de concurrencia?

Respuestas a la pregunta(1)

Su respuesta a la pregunta