Пример:
Я добавляю атрибут PostSharp к методу, чтобы гарантировать, что секундомер запускается до вызова метода и останавливается сразу после возврата вызова.Этот метод используется в веб-приложении, поэтому он будет вызываться несколькими потоками.
Я храню результат хронометража секундомера в статической поточно-безопасной коллекции для использования всеми потоками.Затем эта коллекция может быть прочитана другим потоком мониторинга для целей анализа.
Будет ли это принудительно блокировать все вызовы методов, пока они ожидают снятия блокировки коллекции?(чтобы они могли завершить блок кода postharp).
Может ли асинхронный обмен сообщениями с использованием MSMQ разрешить неблокирующее решение этой проблемы?
Код атрибута PostSharp:
//...
public static ThreadSafeCollection _collection;
public override void OnInvocation(MethodInvocationEventArgs eventArgs)
{
var start = DateTime.Now;
eventArgs.Proceed();
var timeSpent = (DateTime.Now - start).TotalMilliseconds;
_collection.Add(timeSpent); //will this cause all
//method calls to methods
//decorated with this
//attribute to block on the
//_collection addition?
}
// ...