c # Thread Pool - как вернуть значение (чтобы оно полностью синхронизировалось с запросом) - PullRequest
1 голос
/ 21 сентября 2011

У меня есть веб-сервис, который запрашивает данные с моего сервера.

Запрос должен быть выполнен в пуле потоков, как я могу вернуть значение клиенту?

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Вы не можете передать ответ своему клиенту по первому запросу. Вам нужно будет вернуть токен, который клиент впоследствии запросит другой метод в вашем классе, чтобы проверить, завершена ли операция; если операция завершена, метод возвращает результат, в противном случае он возвращает результат, чтобы указать, что он должен продолжить опрос.

Если вы используете .NET 4.0, я бы рекомендовал использовать Task<T> класс и передать его обратно вашему клиенту; ваш клиент может опросить результат, подождать его, получить уведомление, когда он будет сделан, и т. д.

Если вы не работаете с .NET 4.0, я рекомендую использовать пользовательский Delegate, назначить ему анонимный метод / группу методов и затем вызвать BeginInvoke для делегата; это вернет реализацию IAsyncResult , которую можно использовать для выполнения операций, упомянутых выше (опрос, ожидание и т. д.).

1 голос
/ 21 сентября 2011

Многопоточность по определению асинхронная. Чтобы получить значение обратно, вам нужно реализовать некоторую форму обратного вызова (метод, который поток может вызвать, когда завершит свою работу), чтобы он мог передать значение.

...