public void BeforeSendReply(ref Message reply, object correlationState)
{
var replyCopy = reply;
ThreadPool.QueueUserWorkItem(delegate
{
RequestQueueHandler.RequestQueue.Add((Message)correlationState, replyCopy);
});
}
vsDelegate.BeginInvoke 대 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쪽으로 기울어졌습니다. 그러나 실제로 더 좋은 것은 아니지만,이 경우에도 일반적으로 더 좋은 것은 아닙니다.
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
Framework 4.0을 사용 중입니다. 확장 할 수 있습니까? 아마도 답변으로 게시 할 수 있습니까? – bevacqua