Я использую Enterprise Library 4 в одном из моих проектов для ведения журнала (и других целей). Я заметил, что есть некоторые затраты на регистрацию, которую я делаю, что я могу смягчить, выполнив ведение журнала в отдельном потоке.
То, как я делаю это сейчас, это то, что я создаю объект LogEntry, а затем вызываю BeginInvoke на делегат, который вызывает Logger.Write.
new Action<LogEntry>(Logger.Write).BeginInvoke(le, null, null);
То, что я действительно хотел бы сделать, это добавить сообщение журнала в очередь, а затем создать один поток, который вытягивает экземпляры LogEntry из очереди и выполняет операцию журнала. Преимущество этого заключалось бы в том, что ведение журнала не мешает выполнению операции, и не каждая операция ведения журнала приводит к тому, что задание запускается в пуле потоков.
Как создать общую очередь, которая поддерживает много писателей и одного читателя потоковым безопасным способом? Некоторые примеры реализации очереди, которые предназначены для поддержки многих авторов (без создания синхронизации/блокировки) и одного читателя, будут действительно оценены.
Рекомендация относительно альтернативных подходов также будет оценена, но я не заинтересован в изменении рамок регистрации.