Теоретический вопрос. Если нам нужно синхронизировать потоки, то в большинстве случаев наверное достаточно lock, это почти то же самое, что класс Monitor, а какая разница с классом Mutex, неужели только в том, что Монитор это вещь статическая,а для Мутекса нужно создавать экземпляр класса.
Класс Monitor работает только в рамках одного процесса. Mutex'у же, можно задать идентификатор, который будет единственным для всей ОС.
Например, это полезно, если у Вас запущено два разных приложения, но между ними должна происходить синхронизация (как пример, запись в файл и чтение).
Так же посмотрите вот этот вопрос.
P.S. по поводу большинства случаев и использования lock - если у Вас есть ожидание задач (await) - то lock использовать не получится.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости