我在嘗試使用異步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 2012-03-16 11:20:36
事實上有兩場比賽 - 一場@CodeInChaos提到,然後你最後的'await'正在等待,直到你*訂閱了事件 - 但不能保證事件已經發生。 – 2012-03-16 11:28:23