我试图使用Async CTP构建一个能异步运行并返回一个值的函数。
以下是我的示例代码,但我不知道为什么它不能填充“resp”变量并返回该值。
以下是我的示例代码,但我不知道为什么它不能填充“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);
}
await
是等待你订阅事件 - 但不能保证事件是否已经发生。 - Damien_The_Unbeliever