public void BeforeSendReply(ref Message reply, object correlationState)
{
var replyCopy = reply;
ThreadPool.QueueUserWorkItem(delegate
{
RequestQueueHandler.RequestQueue.Add((Message)correlationState, replyCopy);
});
}
vs
private delegate void RequestQueueHandlerAdd(Message request, Message reply);
private static void AsyncMethod(Message request, Message reply)
{
RequestQueueHandler.RequestQueue.Add(request, reply);
}
public void BeforeSendReply(ref Message reply, object correlationState)
{
((RequestQueueHandlerAdd)AsyncMethod).BeginInvoke((Message)correlationState, reply, null, null);
}
这两个中应该使用哪一个?(哪个性能更好?) 为什么? 我的方法的开销是否影响决策,还是其中一种实现总是比另一种更优? 为什么?
我倾向于使用ThreadPool.QueueWorkerUserItem,但我不知道哪一个实际上更好,无论在这种情况下还是一般情况下。
更新
我读了一些关于TPL的东西..得出了以下结论:
public void BeforeSendReply(ref Message reply, object correlationState)
{
var replyCopy = reply;
var enqueue = Task.Factory.StartNew(() => RequestQueueHandler.RequestQueue.Add((Message)correlationState, replyCopy));
}
我应该如何处理这里的异常?我的意思是,如果我执行
public void BeforeSendReply(ref Message reply, object correlationState)
{
var replyCopy = reply;
var enqueue = Task.Factory.StartNew(() => RequestQueueHandler.RequestQueue.Add((Message) correlationState, replyCopy));
**try
{
enqueue.Wait();
}
catch(AggregateException e)
{
Handle(e);
}**
}
我是不是在这里错过了并行性的全部要点?
难道我不应该只处理RequestQueueHandler.RequestQueue.Add
方法中可能抛出的异常吗?