gpt4 book ai didi

c# - 使用 Async CTP 在单个函数中异步 HTTP 发布数据

转载 作者:行者123 更新时间:2023-11-30 14:15:36 25 4
gpt4 key购买 nike

我正在尝试使用 Async 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);
}

最佳答案

您可以改为使用 UploadDataTaskAsync 扩展方法(CTP 的一部分),而不必自己编写管道代码:

public async Task<string> sendRequest(string url, string postdata)
{
WebClient client = new WebClient();
byte[] data = Encoding.UTF8.GetBytes(postdata);
Uri uri = new Uri(url);
resp = System.Text.Encoding.UTF8.GetString(await client.UploadDataTaskAsync(uri,"POST", data));
return resp;
}

该扩展方法的实现正确处理事件订阅,并确保在事件实际触发时完成任务。

关于c# - 使用 Async CTP 在单个函数中异步 HTTP 发布数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com