public void BeforeSendReply(ref Message reply, object correlationState)
{
var replyCopy = reply;
ThreadPool.QueueUserWorkItem(delegate
{
RequestQueueHandler.RequestQueue.Add((Message)correlationState, replyCopy);
});
}
VSDelegate.BeginInvoke VS ThreadPool.QueueWorkerUserItem
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倾斜的我不知道哪一个是真正好,无论是在这种情况下,也不在一般
UPDATE
我了解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
方法中可能出现的异常吗?
您正在使用哪个版本的.NET?如果你使用.NET 4,你应该使用Task Parallel Library。那么,不是'应该',而是'强烈鼓励'。 – Tejs 2011-04-19 20:55:52
我正在使用框架4.0,你可以展开,也许发布它作为答案? – bevacqua 2011-04-19 22:25:06