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