2013-06-23 2 views
0

Я хочу отправить запрос в веб-службу, и мне не нужен ответ. Служба выполняет операции в базе данных - я вызываю ее из простого консольного приложения .NET 4.0, которое будет настроено на выполнение по расписанию. Это работает:.NET Async Получить запрос - не волнует ответ

using (var client = new WebClient()) { 
    client.UseDefaultCredentials = true; 
    client.DownloadString(uri); 
} 

но блокирует нить до получения ответа. Я предпочел бы сделать:

using (var client = new WebClient()) { 
    client.UseDefaultCredentials = true; 
    client.DownloadStringAsync(uri); 
} 

, но это просто не кажется, отправки запроса (операции базы данных не выполняется). Есть ли действительно простое решение?

Спасибо.

ответ

4

Да, асинхронная версия не удастся при немедленном удалении клиента.

Вы можете либо не выбрасывайте клиента:

var client = new WebClient(); 
client.UseDefaultCredentials = true; 
client.DownloadStringAsync(uri); 

... или (лучше) прикрепить событие, чтобы избавиться от него, когда он завершает:

var client = new WebClient(); 
client.UseDefaultCredentials = true; 
client.DownloadStringCompleted += delegate { client.Dispose(); }; 
client.DownloadStringAsync(uri); 

(Вы должны проверить, является ли вам нужно подписаться на любые другие события, чтобы избавиться от него при неудаче - я не могу вспомнить, было ли событие по-прежнему уволено в этом случае.)

+0

Ах да, я должен поддерживать клиента в живых, не так ли? ? Я пытался сделать запрос, заставить сервер начать выполнять работу, а затем отключить и позволить серверу идти на веселье, но это не так, как работает HTTP, конечно ... – kad81