gpt4 book ai didi

c# - Thread.Start(WebRequest.GetResponse) 与 WebRequest.BeginGetResponse

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

我想在 UI 上显示下载正在进行时下载文件。使用 WebRequest 我有两个选择:

  1. 使用 WebRequest.BeginGetResponse 和相关方法。

    优点:可以以字节为单位显示准确的进度。

    缺点:要写的代码较多。由于同步和异步方法不能混用,因此我需要使用 BeginGetResponseBeginReadBeginGetRequestStream。更多需要手动实现的事情,包括读取缓冲区、超时。

  2. 启动新线程(或使用线程池),使用WebRequest.GetResponse及相关方法。

    优点:没有不必要的代码。

    缺点:无法显示准确的进度。

由于要下载的文件很小,以字节为单位显示进度是有优势的,但不是关键。如果我使用第二种方法,无论是功能方面还是性能方面,我会错过什么吗?

或者我错过了一个更高级的广泛使用的包装器? (WebClient 没有暴露WebRequest 的属性,所以它对我来说无法使用,因为我需要使用 cookie 等)

最佳答案

如果您创建一个新线程(选项 2),该线程将在执行请求时阻塞。如果您一次只发出一个请求,这无关紧要,但如果您发出很多请求,您可能会得到很多额外的线程。每个线程将花费您约 1MB RAM。

WebRequest.BeginGetResponse 这样的异步调用不会在请求处理过程中阻塞您的任何线程,它只会在您的请求完成后从线程池中选择一个线程来传递结果。

关于c# - Thread.Start(WebRequest.GetResponse) 与 WebRequest.BeginGetResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299101/

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