public void BeforeSendReply(ref Message reply, object correlationState)
{
var replyCopy = reply;
ThreadPool.QueueUserWorkItem(delegate
{
RequestQueueHandler.RequestQueue.Add((Message)correlationState, replyCopy);
});
}
против
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
?