C #: асинхронные делегаты против ThreadPool.QueueUserWorkItem при инициации многих соединений

2

Мне нужно отправить много вызовов веб-сервисов, чтобы удалить кучу записей в Amazon SDB (к сожалению, строки могут быть удалены только в момент времени).

Я использую библиотеку Amazon SDB С#, которая не использует async WebRequests.

В настоящее время я использую ThreadPool.QueueUserWorkItem для очереди в очереди вызовов (я сконфигурировал мое соединение connectionManagement maxconnection, чтобы обеспечить связку соединений) это хорошо работает.. если запрос отправлен, он блокируется и выполняется другой запрос.

Это неправильный путь для достижения этой цели? Должен ли я использовать делегатов async и выполнять BeginInvoke и EndInvoke?

Теги:
delegates
amazon-web-services
asynchronous
threadpool

2 ответа

4
Лучший ответ

Если вам просто нужно поставить в очередь некоторые задания (которые не возвращают значения напрямую), перейдите к ThreadPool.QueueUserWorkItem. Это быстрее. Разница рассматривается в других вопросах (и некоторые замечательные записи в блоге).

2

Для перехода на асинхронный режим необходимо отказаться от библиотеки Amazon и свернуть ее самостоятельно, используя BeginGetRequestStream/BeginGetResponse (который я бы рекомендовал). Если вы используете синхронизацию WebRequests, используйте QueueUserWorkItem.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню