我想在UI上显示下载文件,下载正在进行中。使用WebRequest
我有两个选择:
使用WebRequest.BeginGetResponse
及相关方法。
优点:可以以字节显示确切的进度。
缺点:要编写更多代码。由于同步和异步方法不混合,我需要使用BeginGetResponse
,BeginRead
,BeginGetRequestStream
。手动实现的更多内容,包括读缓冲区,超时。
启动新线程(或使用线程池),使用WebRequest.GetResponse
及相关方法。
优点:没有不必要的代码。
缺点:无法显示确切的进展。
由于要下载的文件相当小,以字节为单位显示进度是有利的,但并不重要。如果我使用第二种方法,功能方面和性能方面,我会想念一些东西吗?
或许我错过了一个更高级别广泛使用的包装纸? (WebClient
不会公开WebRequest
的属性,因此它对我无法使用,因为我需要使用Cookie等。)
答案 0 :(得分:4)
如果您创建一个新线程(选项号2),该线程将在执行请求时阻塞。如果你一次只发出一个请求并不重要,但是如果你做了很多请求,你可能会得到很多额外的线程。每个线程将花费你~1MB RAM。
WebRequest.BeginGetResponse
之类的异步调用在请求进行过程中不会阻塞任何线程,只有在请求完成后才会从线程池中选择一个线程来传递结果。