0

Web サービスにリクエストを送信したいのですが、レスポンスは気にしません。サービスはデータベースで操作を実行します。スケジュールに従って実行するように設定された単純な .NET 4.0 コンソール アプリケーションからサービスを呼び出しています。これは機能します:

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

ただし、応答が受信されるまでスレッドをブロックします。私はむしろやりたい:

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

しかし、これは単にリクエストを送信していないようです (データベース操作は実行されません)。本当に簡単な解決策はありますか?

ありがとう。

4

1 に答える 1

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);

(失敗時に破棄するために、他のイベントにサブスクライブする必要があるかどうかを確認する必要があります。その場合、イベントがまだ発生しているかどうかをすぐに思い出せません。)

于 2013-06-23T08:06:01.087 に答える