非同期 POST を Web サービスに送信する必要があり、データを非同期で送信/取得したいと考えています。
また、リクエストを送信する必要がありますが、応答を待つのは最大 1500 ミリ秒だけです。応答が得られない場合、プログラムは続行する必要があります (これは、外部 Web サービス呼び出しを行うサービスです)。これらのサービス呼び出しを、長時間ブロックして返されるのを待つのではなく、IOCP にオフロードしたいと考えています。合計 1500 ミリ秒だけブロックしたい。
これが私がこれまでに持っているものです:
var httpRequest = (HttpWebRequest)WebRequest.Create(@"urltoPostTo");
httpRequest.Method = "POST";
byte[] data = Encoding.ASCII.GetBytes("test-post");
httpRequest.ContentLength = data.Length;
var asyncTask = Task.Factory.FromAsync<Stream>(httpRequest.BeginGetRequestStream, httpRequest.EndGetRequestStream, httpRequest)
.ContinueWith(response =>
{
var localStream = response.Result;
if (localStream != null)
{
localStream.Write(data, 0, data.Length);
localStream.Close();
}
}); //how do I do the continuation for BeginGetResponse and EndGetResponse from here?
残念ながら変更できない要件がいくつかあります。
- 4.0 を対象とする Visual Studio 2010 を使用しています
- 非同期 BCL を使用できません
- Task.FromAsync を試してみたい