を呼び出します。私が理解する限り、これはrequest.GetRequestStream()
への呼び出しをasychronous.BeginGetRequestStream()
に変更する必要があることを意味します。私はthisの例を見てきましたが、このシナリオにそれをどのように適用するのか分かりません。助けてもらえますか?の実装は、HttpWebRequest非同期は、私はそれを非同期にする必要があり、私はこのコード</p> <pre><code>using (var stream = new StreamWriter(request.GetRequestStream(), Encoding)) stream.Write(body.ToString()); </code></pre> <p>を持って
答えて
ドキュメントが良い例(http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream(v=vs.100).aspx)を持つ:
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;
class HttpWebRequestBeginGetRequest
{
private static ManualResetEvent allDone = new ManualResetEvent(false);
public static void Main(string[] args)
{
// Create a new HttpWebRequest object.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/example.aspx");
request.ContentType = "application/x-www-form-urlencoded";
// Set the Method property to 'POST' to post data to the URI.
request.Method = "POST";
// start the asynchronous operation
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
// Keep the main thread from continuing while the asynchronous
// operation completes. A real world application
// could do something useful such as updating its user interface.
allDone.WaitOne();
}
private static void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
Stream postStream = request.EndGetRequestStream(asynchronousResult);
Console.WriteLine("Please enter the input data to be posted:");
string postData = Console.ReadLine();
// Convert the string into a byte array.
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
// Write to the request stream.
postStream.Write(byteArray, 0, postData.Length);
postStream.Close();
// Start the asynchronous operation to get the response
request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
Console.WriteLine(responseString);
// Close the stream object
streamResponse.Close();
streamRead.Close();
// Release the HttpWebResponse
response.Close();
allDone.Set();
}
GetResponseCallBackから元の呼び出し元に何か(たとえばレスポンス文字列)を返すようにこのコードを変更するには、AsyncCallBackではシグネチャにvoid戻り値の型が必要ですか? –
これをどうやって作るのか分かりませんでした。 –
あなたは、このコードによって理解することができます。
このプログラムでは、非同期呼び出しを介してデータを渡すRequestStateクラスと、インターネットリソースに対して非同期要求を実装するClientGetAsyncクラスの2つのクラスを使用します。
RequestStateクラスは、要求を処理する非同期メソッドへの呼び出しのあいだ、要求の状態を保持します。これには、リソースへの現在の要求と応答で受け取ったストリーム、インターネットリソースから現在受信したデータを含むバッファ、および完全な応答を含むStringBuilderを含むWebRequestおよびStreamインスタンスが含まれます。 AsyncCallbackメソッドがWebRequest.BeginGetResponseで登録されている場合、RequestStateは状態パラメータとして渡されます。
ClientGetAsyncクラスは、インターネットリソースに対する非同期要求を実装し、結果の応答をコンソールに書き込みます。次のリストで説明するメソッドとプロパティが含まれています。
allDoneプロパティには、要求の完了を通知するManualResetEventクラスのインスタンスが含まれます。
Main()メソッドはコマンドラインを読み取り、指定されたインターネットリソースの要求を開始します。 WebRequest wreqとRequestState rsを作成し、BeginGetResponseを呼び出して要求の処理を開始し、allDone.WaitOne()メソッドを呼び出して、コールバックが完了するまでアプリケーションが終了しないようにします。応答がインターネットリソースから読み取られた後、Main()はコンソールにそれを書き込み、アプリケーションは終了します。
showusage()メソッドは、コマンドラインの例をコンソールに書き込みます。コマンドラインにURIが指定されていない場合、Main()によって呼び出されます。
RespCallBack()メソッドは、インターネット要求に対して非同期コールバックメソッドを実装します。インターネットリソースからの応答を含むWebResponseインスタンスを作成し、応答ストリームを取得してから、ストリームから非同期でデータの読み取りを開始します。
ReadCallBack()メソッドは、応答ストリームを読み取るための非同期コールバックメソッドを実装しています。インターネットリソースから受信したデータをRequestStateインスタンスのResponseDataプロパティに転送し、その後、データが返されなくなるまでレスポンスストリームの別の非同期読み取りを開始します。すべてのデータが読み取られると、ReadCallBack()は応答ストリームをクローズし、allDone.Set()メソッドを呼び出してレスポンス全体がResponseDataに存在することを示します。
using System;
using System.Net;
using System.Threading;
using System.Text;
using System.IO;
// The RequestState class passes data across async calls.
public class RequestState
{
const int BufferSize = 1024;
public StringBuilder RequestData;
public byte[] BufferRead;
public WebRequest Request;
public Stream ResponseStream;
// Create Decoder for appropriate enconding type.
public Decoder StreamDecode = Encoding.UTF8.GetDecoder();
public RequestState()
{
BufferRead = new byte[BufferSize];
RequestData = new StringBuilder(String.Empty);
Request = null;
ResponseStream = null;
}
}
// ClientGetAsync issues the async request.
class ClientGetAsync
{
public static ManualResetEvent allDone = new ManualResetEvent(false);
const int BUFFER_SIZE = 1024;
public static void Main(string[] args)
{
if (args.Length < 1)
{
showusage();
return;
}
// Get the URI from the command line.
Uri httpSite = new Uri(args[0]);
// Create the request object.
WebRequest wreq = WebRequest.Create(httpSite);
// Create the state object.
RequestState rs = new RequestState();
// Put the request into the state object so it can be passed around.
rs.Request = wreq;
// Issue the async request.
IAsyncResult r = (IAsyncResult) wreq.BeginGetResponse(
new AsyncCallback(RespCallback), rs);
// Wait until the ManualResetEvent is set so that the application
// does not exit until after the callback is called.
allDone.WaitOne();
Console.WriteLine(rs.RequestData.ToString());
}
public static void showusage() {
Console.WriteLine("Attempts to GET a URL");
Console.WriteLine("\r\nUsage:");
Console.WriteLine(" ClientGetAsync URL");
Console.WriteLine(" Example:");
Console.WriteLine(" ClientGetAsync http://www.contoso.com/");
}
private static void RespCallback(IAsyncResult ar)
{
// Get the RequestState object from the async result.
RequestState rs = (RequestState) ar.AsyncState;
// Get the WebRequest from RequestState.
WebRequest req = rs.Request;
// Call EndGetResponse, which produces the WebResponse object
// that came from the request issued above.
WebResponse resp = req.EndGetResponse(ar);
// Start reading data from the response stream.
Stream ResponseStream = resp.GetResponseStream();
// Store the response stream in RequestState to read
// the stream asynchronously.
rs.ResponseStream = ResponseStream;
// Pass rs.BufferRead to BeginRead. Read data into rs.BufferRead
IAsyncResult iarRead = ResponseStream.BeginRead(rs.BufferRead, 0,
BUFFER_SIZE, new AsyncCallback(ReadCallBack), rs);
}
private static void ReadCallBack(IAsyncResult asyncResult)
{
// Get the RequestState object from AsyncResult.
RequestState rs = (RequestState)asyncResult.AsyncState;
// Retrieve the ResponseStream that was set in RespCallback.
Stream responseStream = rs.ResponseStream;
// Read rs.BufferRead to verify that it contains data.
int read = responseStream.EndRead(asyncResult);
if (read > 0)
{
// Prepare a Char array buffer for converting to Unicode.
Char[] charBuffer = new Char[BUFFER_SIZE];
// Convert byte stream to Char array and then to String.
// len contains the number of characters converted to Unicode.
int len =
rs.StreamDecode.GetChars(rs.BufferRead, 0, read, charBuffer, 0);
String str = new String(charBuffer, 0, len);
// Append the recently read data to the RequestData stringbuilder
// object contained in RequestState.
rs.RequestData.Append(
Encoding.ASCII.GetString(rs.BufferRead, 0, read));
// Continue reading data until
// responseStream.EndRead returns –1.
IAsyncResult ar = responseStream.BeginRead(
rs.BufferRead, 0, BUFFER_SIZE,
new AsyncCallback(ReadCallBack), rs);
}
else
{
if(rs.RequestData.Length>0)
{
// Display data to the console.
string strContent;
strContent = rs.RequestData.ToString();
}
// Close down the response stream.
responseStream.Close();
// Set the ManualResetEvent so the main thread can exit.
allDone.Set();
}
return;
}
}
- 1. Transform IEnumerable <Task<T>>各タスクを待って非同期に
- 2. <image>タグの非同期リクエストはありますか?
- 3. は、私は私のテーブル<code>new</code>にフィールド<code>photo</code>から<code>~\NewFolder1\</code>を削除する必要が
- 4. 私は上記の機能</p> <p>を呼び出すコードを持っている私は、同じファイルに次のコード</p> <pre><code>var PROMO = PROMO || {}; PROMO.Base = (function() { var _self = this; var Init = function() { WireEvents(); }; var WireEvents = function() { //wire up events }; }()); </code></pre> <p>を持って
- 5. 私は次のシグネチャを持つメソッド<code>GetList()</code>を必要<code>IListSource</code>実装しています非ジェネリックのIList
- 6. <type1>「<typename>」「<インターフェイス名>」のインターフェースは「<membername>」を実装する必要があります
- 7. はSocket.BeginReceive(のIList <ArraySegment <byte>>バッファます。..ない非同期
- 8. 非同期ソケット、</p> <p>私のクライアントアプリケーションが非同期にサーバから受信している...そんなにを書き込むため、
- 9. Angular2 - 私は/ RESTのAPIの終了から非同期呼び出したら<strong>ロードメッセージ</strong>を隠すために喜んで、それは<strong>ロードメッセージ</strong>を隠し、示しロードメッセージを表示し、非同期呼び出しが
- 10. 私は同期コードを持って、私はAgueasに今のNode.jsの</p> <p>のための[1]アドオンを書いているC++コード
- 11. 正しい方法は、私は結果をソートする必要があり、私はそれを移入した後</p> <pre><code>target_results : TDictionary<longint,double>; </code></pre> <p>のようなTDictionaryを持つ配列
- 12. イオンビルドアンドロイド:私は</p> <blockquote> <p>はAndroidが</p> </blockquote> <p>その後、私は私のコードを実行する必要があり、デフォルトのcode..Whatと私のコードの上書きがイオンビルドのまま、このコマンドを使用して、イオンのアプリを構築する場合、すべてのコード
- 13. XMLシリアライザ - 私は次のコードを持って、</p> <p>を要素
- 14. は、これは私です</p> <pre><code>'[errors]' => [], </code></pre> <p>..私は、ユーザーテーブルを持っていると私は私が<code>$user</code>をデバッグする場合でも、それはnullを返し<code>save()</code>保存したいときにエラーがないCakePhp3
- 15. アイテムは、私が<code>ObservableCollection<string></code>を持って
- 16. 私は私のコードでこれを持って<%= for %>ビューヘルパー
- 17. 非同期ラムダ式を代入するSystem.Func <T>?それは私がサードパーティのキャッシュで働いている</p> <p>コンクリート型Tとしてバックキャストされたリソースを取得し</p> <pre><code>private async Task<T> _Fetch<T>(Uri uri) </code></pre> <p>:
- 18. マングースコレクションからスキーマを取り出す方法は?今私は、そのコレクションからスキーマを取得する必要があり、私は、ユーザーのコレクションを取得</p> <pre><code>var collection = mongoose.connection.db.collection("users"); </code></pre> <p>:
- 19. は、私は私のカスタムクラスに</p> <pre><code>@IBOutlet var nextControl: UIControl! </code></pre> <p>このIBOutletを作成したタイプのUicontrol
- 20. ReSharperの:</p> <pre><code>new ResharperFeature </code></pre> <p>そして私は<em>Ctrlキーを押しながらBackspaceキー</em>を押すと、私が手::</p> <pre><code>new Resharper </code></pre> <p>そして、私が欲しい、私はテキストを持っている場合はCtrl-BackspaceキーがCamelCaseWord
- 21. PHPは</p> <pre><code>$var = 'Name_here'; echo '<input type="text" name="name12" value="'.$var.'", PHP_EO>'; </code></pre> <p>2 one.php ...私はそれは私がその実行可能かどうかを確認するために助けが必要な動作するかどうか私は知らないPHPのコードを持っているデータについては、次のPHPに</p> <p>を
- 22. アンドロイド:私は、ログインからVAR "名" を渡す必要があり</li> </ul> <p></p> <ul> <li>ログイン</li> <li>選択</li> <li>エントリ:私は3つのアクティビティを持っている第三の活動
- 23. 反復処理は、私はしばらくの間、サーフィンjQueryのcode.Afterの一方各ループに2つの配列の値にアクセスする必要がある私は、同じサイズの2つのJavaScriptアレイ</p> <pre><code>var demo=new Array(); var demo3=new Array(); </code></pre> <p>したら
- 24. 同期ブロックは、この演習では、まっすぐ私たちは、コードのブロックを同期しようとします。この演習では <p>コード</p>のブロックを同期キャシーSeirraとバート・ベイツ</p> <p>によってSCJPの外にある
- 25. grepは、フォルダを除外して、私は</p> <pre><code>/var/ </code></pre> <p>にいるならば、私は<code>/var/www</code></p> <p>を検索したいLinuxの
- 26. ネットのInvoke非同期メソッドと私はansyc方法</p> <pre><code>public Task<Car> GetCar() { } </code></pre> <p>を持って
- 27. Mavenの - 私は私が持っているプロジェクトのそれぞれを構築するときにどのよう</li> <li>DataComponents</li> <li>ServiceComponents </ul> <p></li>を</p> <ul> <li>WebComponentsを私は3つのMavenを持って一つのプロジェクト
- 28. が、それは私がクラスメソッド</p> <pre><code>+ (id)sharedInstance; </code></pre> <p>を持って、私は</p> <pre><code>NSString *string = @"return sharedInstance;"; </code></pre> <p>を持っ例えば無地のObjective Cのコード
- 29. レールは、私が<code>Foo::ActiveRecord_AssociationRelation</code>を持って
- 30. 非同期戻り型がvoid、タスクまたはタスクである必要がある理由<T>
使用している.NETのバージョンは? .NET 4.5では簡単です。 –
それは4.私はまだ4.5を使用することはできません。 –
まだ4で可能ですか? –