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
?