Я пишу веб-сервис ASP.NET, используя C #, который имеет функцию DoLookup (). Для каждого вызова функции DoLookup () мне нужно, чтобы мой код выполнял два отдельных запроса: один к другому веб-сервису на удаленном сайте и один к локальной базе данных. Оба запроса должны быть завершены, прежде чем я смогу скомпилировать результаты и вернуть их в ответ на метод DoLookup. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу сделать это максимально эффективным, как с точки зрения времени отклика, так и использования ресурсов на веб-сервере. Мы ожидаем до нескольких тысяч запросов в час. Вот приблизительный C # -подобный обзор того, что я имею до сих пор:
public class SomeService : System.Web.Services.WebService
{
public SomeResponse DoLookup()
{
// Do the lookup at the remote web service and get the response
WebResponse wr = RemoteProvider.DoRemoteLookup();
// Do the lookup at the local database and get the response
DBResponse dbr = DoDatabaseLookup();
SomeResponse resp = new SomeResponse( wr, dbr);
return resp;
}
}
Приведенный выше код выполняет все последовательно и прекрасно работает, но теперь я хочу сделать его более масштабируемым. Я знаю, что могу асинхронно вызывать функцию DoRemoteLookup () (RemoteProvider имеет методы BeginRemoteLookup / EndRemoteLookup) и что я также могу выполнять поиск в базе данных асинхронно, используя методы BeginExecuteNonQuery / EndExecuteNonQuery.
Мой вопрос (наконец-то) заключается в следующем: как запустить поиск удаленной веб-службы и базы данных одновременно в отдельных потоках и убедиться, что они оба завершены, прежде чем возвращать ответ?
Причина, по которой я хочу выполнить оба запроса в отдельных потоках, заключается в том, что они оба могут иметь длительное время ответа (1 или 2 секунды), и я хотел бы освободить ресурсы веб-сервера для обработки других запросов, пока он жду ответов. Еще одно примечание - у меня действительно есть поиск удаленного веб-сервиса в асинхронном режиме, я просто не хотел, чтобы приведенный выше пример был слишком запутанным. То, с чем я бьюсь, - это как поиск удаленной службы, так и поиск в базе данных, запущенной одновременно, и выяснение того, когда они завершат ОБА.
Спасибо за любые предложения.