2009-08-13 4 views
2

Ich muss viele Web-Service-Anrufe senden, um eine Reihe von Datensätzen in Amazon SDB zu löschen (leider können Zeilen nur jeweils zur Zeit gelöscht werden).C#: Asynchrone Delegaten vs ThreadPool.QueueUserWorkItem beim Initiieren vieler Verbindungen

Ich verwende Amazon SDB C# -Bibliothek, die keine asynchronen WebRequests verwendet.

Derzeit ich ThreadPool.QueueUserWorkItem verwenden, um ein paar Anrufe in die Warteschlange einzureihen (I konfiguriert mein connection maxconnection für eine Reihe von Verbindungen zu ermöglichen) das funktioniert well..as die Anfrage aus gesendet wird, blockiert sie und eine weitere Anforderung ist gemacht.

Ist das der falsche Weg, um dieses Ziel zu erreichen? Sollte ich asynchrone Delegaten verwenden und BeginInvoke und EndInvoke ausführen?

Antwort

4

Wenn Sie nur einige Jobs anstehen müssen (die Werte nicht direkt zurückgeben) gehen Sie mit ThreadPool.QueueUserWorkItem. Es ist schneller. Der Unterschied ist in other questions (und einige großartige Blogeinträge da draußen).

2

Going Trully Async würde erfordern, die Amazon-Bibliothek aufzugeben und eigene, mit BeginGetRequestStream/BeginGetResponse (was ich empfehlen würde) zu rollen. Wenn Sie bei den WebRequests für die Synchronisierung bleiben, verwenden Sie QueueUserWorkItem.

Verwandte Themen