gpt4 book ai didi

c# - WebClient 回调异步结果?

转载 作者:行者123 更新时间:2023-11-30 22:21:39 24 4
gpt4 key购买 nike

我想编写一个类来处理我的 WebClient-Tasks 并返回其结果。
问题是,异步下载不会让简单的 return 处理:

public void checkAvailability()
{
WebClient wc = new WebClient();
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
wc.UploadStringCompleted += wc_UploadStringCompleted;
wc.UploadStringAsync(new Uri("http://random.php"), "?lookup=10");

//return parsed content from wc_UploadStringCompleted
}

private void wc_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
// do something
}

我怎样才能把它们放在一起让它发挥作用?

最佳答案

好的,在 Visual Studio 2012 和 .NET 4.5 中,使用 System.Net.WebClient 类中的 UploadStringTaskAsync() 方法更容易:

public async Task<string> CheckAvailability()
{
var webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
var result = await webClient.UploadStringTaskAsync(new Uri("http://random.php"), "?lookup=10");
return result;
}

该方法抛出的任何异常都会像常规的非异步方法一样中断您的应用程序流程。请注意,无论您在哪里调用此方法都必须 await 才能获得结果,因此:

var availability = await CheckAvailability();

在其他一些 async 标记的方法中。

如果你不想使用这个,你必须使用回调:

public void CheckAvailability(Action<Exception, string> callback)
{
var webClient = new WebClient();
webClient.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
webClient.UploadStringCompleted += (s,e) => {
if(e.Error != null)
callback(e.Error, string.Empty);
else
callback(null, e.Result);
};
wc.UploadStringAsync(new Uri("http://random.php"), "?lookup=10");
}

现在你必须传递返回 void 的函数并接受两个类型为 Exceptionstring 的参数,它们将在上传完成时执行,但您必须手动处理异常。

关于c# - WebClient 回调异步结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14195361/

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