私は非同期CTPを使用して非同期を実行し、値を返す単一の関数を構築しようとしています。非同期HTTP非同期CTPを使用して単一の機能でデータをポスト
ここは私のサンプルコードです。なぜ私はそれが返されるときに "resp"変数を埋めるのかわかりません。
public async Task<string> sendRequest(string url, string postdata)
{
WebClient client = new WebClient();
byte[] data = Encoding.UTF8.GetBytes(postdata);
Uri uri = new Uri(url);
client.UploadDataAsync(uri,"POST", data);
string resp = "";
await TaskEx.Run(()=>
client.UploadDataCompleted += (e, s) =>
{
resp = System.Text.Encoding.UTF8.GetString(s.Result);
});
return resp;
}
はまた、私はプログラムの凍結(よりだけでなく、しばらくの間、何もしない)が、これを試してみました。多分どんな矯正が助けることができる。
public async Task<string> sendRequest(string url, string postdata)
{
string resp = "";
WebClient client = new WebClient();
byte[] data = Encoding.UTF8.GetBytes(postdata);
Uri uri = new Uri(url);
data = await TaskEx.Run(()=>client.UploadData(uri,"POST", data));
return System.Text.Encoding.UTF8.GetString(data);
}
アップロードを開始した後、イベントを購読しています。これはあなたが競合状態にあることを意味します。 – CodesInChaos
2つのレースが実際には--CodeInChaosが言及し、あなたの最後の 'await'はイベントに*登録されるまで待っていますが、イベントが実際に起こったという保証はありません。 –