Вот модифицированный ответ:
вы не хотите блокировать вызывающего, а также хотите, чтобы вызывающий ожидал вывода.Тогда я думаю, что вам нужен веб-сервис.Вы определяете веб-сервис для задачи.И вызывающий абонент вызывает веб-сервис, чтобы получить результат.Веб-сервисы поддерживают параллельную обработку.
Я предлагаю вам использовать WCF .WCF имеет шаблон сообщения запроса / ответа, где одна конечная точка запрашивает данные от второй конечной точки.Вторая конечная точка отвечает.WCF - такая большая тема, и мне жаль, что я не могу погрузиться в детали здесь.Но вы могли бы легко начать с этого видео .А вот больше видео для вас.
==================== ниже приведен старый ответ ===================
Вы можете начать новый поток для каждого события:
void processEvent(string xml, int …, out string resultXML, out string description)
{
new Thread(Handler).Start(xml);
}
void Handler(object xml)
{
//do the actual work here
}
Каждый запрос вызывающего будет немедленно получен ответом потока,так что абонент не будет заблокирован.И каждый поток автоматически завершит работу после завершения обработки запроса, поэтому в вашей системе не будет слишком много потоков.
Это просто простое решение.Возможно, вы захотите рассмотреть пул потоков для повышения производительности.