【发布时间】:2011-03-13 20:06:26
【问题描述】:
例子:
我为方法添加了一个 PostSharp 属性,以确保秒表在调用该方法之前启动,并在调用返回后停止。该方法用于web应用,所以会被多个线程调用。
我将秒表计时的结果存储在静态线程安全集合中,供所有线程使用。然后可以由另一个监视线程读取此集合以进行分析。
这会有效地强制所有方法调用在等待释放集合上的锁时阻塞吗? (以便他们可以完成 postsharp 代码块)。
使用 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?
}
//...
【问题讨论】:
标签: c# msmq postsharp multithreading