Я пытаюсь интегрировать стороннюю библиотеку в моем приложении WPF. Эта библиотека используется для сбора истории кредитной карты для человека по его номеру социального страхования. Он в основном предоставляет метод, который возвращает void. Как только этот метод будет завершен, вы сможете собрать историю кредитных карт.Нужны предложения по эффективному дизайну для моего случая использования
ThirdPartyLibrary Instance = new Instance(SSN);
Instance.Run(); // This method returns a void and it blocks until data retrieval completes
if (Instance.Success)
CreditHistory History = Instance.CreditHistory;
Теперь я хочу, чтобы запустить этот API для числа лиц, одновременно, однако, я также хочу иметь порог максимального количества запросов одновременно. Если этот порог поражен, я хотел бы дождаться завершения одного из этих запросов перед отправкой нового запроса. Наконец, я хотел бы предоставить обновление моего пользовательского интерфейса, поскольку любой из представленных запросов будет успешным или не удастся.
Вот мои вопросы:
Эта партия API третий может в конечном итоге ждет довольно долго для сбора информации. Использует ли API TPL/PLINQ, например
Parallel.ForEach
илиAsParallel
хорошим кандидатом на эту ситуацию?Могу ли я использовать
await/async
для создания обертки вокруг звонков в стороннюю библиотеку, учитывая, что его метод Run возвращает пустоту?Что было бы лучше всего подождать, когда будет отправлен индивидуальный запрос, чтобы я мог обновлять свой интерфейс пользователя о прогрессе.
Просьба представить ваши предложения (с некоторым примером кода) о том, как его следует разрабатывать/внедрять? Я много читал в Tasks и Async/Await, но довольно запутался, как лучшие образцы для этого варианта использования?
Вы можете использовать блокирующую коллекцию с верхней границей http://msdn.microsoft.com/en-us/library/dd267301(v=vs.110) .aspx – Paparazzi
Спасибо Бальзам за ваше предложение. Это будет использование шаблона производителя-потребителя, верно? Если это так, я читал об этом также, но я не уверен, как интегрировать его с этой сторонней библиотекой, а также получать обновление о достигнутом прогрессе. Есть идеи? –
В основном я читал/играл с меньшими примерами кода, чтобы понять понятия. Например, я читал в нескольких местах, что Parallel.ForEach не будет хорошим кандидатом для любых операций, которые делают I/O. Этот сторонний API вызывает некоторые веб-службы для извлечения данных, поэтому я просто хотел получить мысли о том, какой подход я должен использовать для начала в моем проекте. –