DownloadFile 与 DownloadFileAsync

2023-11-22

我正在使用 WebClient.DownloadFile 从 Web 服务器一次下载一个文件,但是,我想知道“线程被阻止”开发人员是否意味着应用程序不会响应?

我尝试使用 WebClient.DownloadFileAsync 但它不像 DownloadFile 那样工作,请澄清,我无法判断,因为我正在从网络下载文件,所以它几乎可以立即下载,提前致谢。

PS:是的,我尝试谷歌搜索和阅读,找不到我需要的答案。


Edit: WebClient.DownloadFileAsync以“Async”结尾,但不返回任务。它是的一部分Event-based Asynchronous Pattern所以我的回答不相关。这是:您需要订阅WebClient.DownloadFileCompleted事件来了解异步操作何时完成。例如:

var client = new WebClient();
var uri = new Uri(address);

client.DownloadFileCompleted += (sender, e) => Console.WriteLine("Finished");
client.DownloadFileAsync(uri, "Hamsters.txt");

原答案:WebClient.DownloadFileAsync返回您需要等待的任务。像这样:

await WebClient.DownloadFileAsync(...)

DownloadFileAsyncis 触发异步操作并返回一个任务,该任务将在操作结束时完成。await意味着等待该任务以异步方式结束,因此当您获得结果时,它后面的代码将运行DownloadFileAsync.

共时性DownloadFile将阻塞调用它的线程。如果是 UI 线程,那么是的...您的应用程序将不会响应。如果它不是 UI 线程,那么它仍然会响应,但可扩展性会较差(这意味着它使用线程来等待而不是工作,因此您的应用程序作为一个整体可以使用相同数量的线程执行更少的操作)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DownloadFile 与 DownloadFileAsync 的相关文章

  • 如何重命名序列化对象列表后生成的 XML 属性

    我正在序列化对象列表List
  • is_integral 与 is_integer:其中之一是多余的吗?

    是积分 http en cppreference com w cpp types is integral and 是整数 http en cppreference com w cpp types numeric limits is inte
  • binary_log_types.h:没有这样的文件或目录

    我正在编译一个小型 mysql C 项目并且 遇到以下错误 C Program Files x86 MySQL MySQL Server 5 7 include mysql com h 22 30 fatal error binary lo
  • 可变数量的(常量)引用参数

    我试图从我的高级代码 使用 C 11 中消除原始指针 并且我找到了引用 尤其是const 在许多情况下 当没有所有权转移时 是一个很好的替代品 但如果有的话该怎么办variable我想通过 常量 引用传递的参数数量 你不能创建一个std v
  • NHibernate IQueryable 集合作为 root 的属性

    我有一个根对象 它有一个集合属性 例如 I have a Shelf object that has Books Now public class Shelf public ICollection
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • & 运算符的含义是什么?

    在下面的代码中 Expression
  • 我的 WPF 应用程序未触发 MainWindow_Loaded

    我目前正在关注Pluralsight C Fundamentals Part 1并在Classes and Objects视频部分指导我在 Visual Studio 中创建一个新的 WPF 应用程序并填写代码 这导致以下结果 namesp
  • 以编程方式运行 T4 文本模板

    有没有一种方法可以通过代码以编程方式运行 T4 文本模板 我正在制作一种自定义域特定语言 我希望相关的文本模板在用户每次保存时运行 目前 这就是我在 DSL 模型中所做的事情 protected override void OnDocume
  • Identity Server 4:添加访问令牌的声明

    我正在使用 Identity Server 4 和隐式流 并且想要向访问令牌添加一些声明 新的声明或属性是 tenantId 和 langId 我已将 langId 添加为我的范围之一 如下所示 然后通过身份服务器请求 但我也获得了tena
  • 为什么这个单独的定义会导致错误?

    挑战 我有这段代码无法编译 你能找出问题所在吗 有一次让我很头疼 header namespace values extern std string address extern int port cpp file std string v
  • 除空字符串外的任何内容的正则表达式

    是否可以使用正则表达式来检测任何不是 空字符串 的内容 如下所示 string s1 string s2 string s3 string s4 etc 我知道我可以使用修剪等 但我想使用正则表达式 s 将匹配任何包含至少一个非空格字符的字
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • Request.Form 和 Request.QueryString 之间的区别?

    有人可以告诉我两者之间的确切区别吗Request Form and Request QueryString 我知道一个区别 比如 如果HTTP请求方式为POST 则用户提交的数据在申请表 收藏 如果HTTP请求方法是GET 则用户提交的数据
  • 为什么未到达的 try-catch 块会增加运行时间?

    我目前正在创建自己的容器库 但我已经看到无法访问 if 语句无效 try catch阻止增加运行时间 这是我的测试 Vector cpp template
  • #define 内存地址声明

    这个 define 语句有什么作用 它用于定义内存地址 但我不明白 uint32 t 部分 define GPxDAT uint32 t 0x6FC0 通常用于访问映射到地址空间的硬件寄存器 或者一些特定的内存地址 硬件寄存器应定义为vol
  • 使用非字符串作为字符串(而不是自动使用 ToString)时如何显示错误?

    建议的重复确实是一个类似的问题 然而 答案只涵盖一种选择 禁用 ToString 本身 还有其他可能的解决方案 例如让 Visual Studio 警告我 或者不调用 ToString 仔细阅读那里的答案 他认为is调用 只是解释说没有办法
  • 如何组合||条件语句中的运算符[重复]

    这个问题在这里已经有答案了 代替 if foo 1 foo 5 foo 9 我喜欢将它们组合起来 类似于以下内容 这不起作用 if foo 1 5 9 那可能吗 不幸的是不是 你最好的选择是创建一个扩展方法 public static bo
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选
  • Powershell - 从图像网址下载图像

    对 powershell 的了解有限 我尝试从图像网址下载图像 例如这样 http hdwallpaperia com wp content uploads 2014 01 Mc Laren P1 Wallpaper Image Pictu

随机推荐

  • 从 VBA 中的完整文件名中提取路径

    我是 VBA 新手 下面是我的代码 该代码不起作用 你们中的任何一个人都可以帮忙吗 Dim nPath1 As String nPath1 Split nPath Declare path as integer Dim path As In
  • 无论如何,是否有将 VkDescriptorImageInfo 设置为 null 或有某种方式跳过使用 VkWriteDescriptorSet 而不会出现 vulkan 抱怨

    我将使用的一些网格并不总是具有 DiffuseMap 或 SpecularMap 当我尝试加载没有漫反射和镜面反射贴图的内容时 程序崩溃 因为 DiffuseMap ImageView SpecularMap ImageView 中没有任何
  • Git:如何在特定提交之前删除历史记录

    即 我有 root c1 c2 c1000 c1001 c1002 c2000 top 我想要 root c1000 c1001 c1002 c2000 top How 我想我可以通过git filter branch 但具体如何 我当然知
  • 使用 sed 将文件中的行替换为另一个文件

    我有一个非常大的制表符分隔文件 我想用另一行替换该文件中的一行 由于该行有 gt 100 列 因此简单的 sed s find replace 是不可取的 我的换行符存储在文件 newline txt 中 我如何实现 sed s find
  • 如何将两种不同的数据类型传递给AsyncTask,Android

    我有一个方法可以执行 SQLite 数据库更新并将其放入 AsyncTask 中 以使其更快 更可靠 然而 更新数据库需要两条数据 一个是 Integer 另一个是此处显示的 PrimaryKeySmallTank 类的对象 使用 Asyn
  • 在 Windows 上的 Python 中按类型删除文件

    我知道如何删除单个文件 但是我在如何删除一种类型的目录中的所有文件的实现中迷失了 假设目录是 myfolder 我想删除所有 config 文件 但不删除其他文件 我该怎么做 谢谢 Use the glob module import os
  • 强制在所有继承类中实现方法

    我有一种情况 我想强制从某个 抽象 类继承的每个类都实现一个方法 这是我通常使用 abstractmethod 实现的目标 但是 考虑到这种多重继承的情况 from abc import ABCMeta abstractmethod cla
  • Django-Rest-Framework 通过 Id 更新外键

    我正在使用 django rest framework 来构建后端 我的列表运行良好 但是 使用 django rest framework 管理屏幕 我无法仅使用外键对象的 Id 字段来创建对象 我希望我的配置不正确 但如果有必要的话 我
  • 如何在apache服务器中运行nodejs应用程序

    我想通过 apache 服务器上的子域运行我的 nodejs 应用程序 我在 cpanel 中创建了主域的子域 我的项目有超过 3 个子域 所有子域都指向不同的 Nodejs 应用程序 子域将我重定向到正确的文件夹中 但是当我通过浏览器中的
  • ggplot 图例:键相对于标签的位置

    我正在使用 ggplot 制作一个图表 其中图例水平位于图上方 我的变量有多个图例 即颜色 形状 线型 theme legend position top legend direction horizontal legend box hor
  • 如何在backbone.js应用程序中保持干净的浏览器历史记录?

    我的backbone js有三个视图 类别列表 类别中的项目列表 个别项目表格 我正在使用backbone js 路由器在这些视图之间导航 应用程序中的用户流程为 12 23 和 3 gt 1 用户可以使用浏览器后退和前进按钮来回导航 这是
  • 进程被杀死后如何查看堆栈跟踪?

    我正在使用 gdb 命令 attach 来调试进程 但在进程崩溃 sigkill 之后 我看不到堆栈跟踪 gdb 中的 bt 命令 gdb BT 没有堆栈 进程被杀死后如何查看堆栈跟踪 通过确保将您的 shell 设置为转储核心ulimit
  • 切换到GLSL 300时,遇到以下错误

    当我切换到使用 OpenGL ES 3 和 GLSL 300 时 我在碎片着色器中遇到以下错误 未声明的标识符 gl FragColor 当使用 GLSL 100 时 一切都很好 现代版本的 GLSL 只需将片段着色器声明为out价值观 以
  • 如何将单元测试改造到代码库中?

    您是否有任何策略可以将单元测试改造到当前没有单元测试的代码库上 Read 有效地处理 Feathers 的遗留代码 吉米 博加德有一个关于 SOC 的好博客系列
  • 如何使用单个数组实现三个堆栈

    我在一个面试网站上遇到了这个问题 该问题要求在单个数组中有效地实现三个堆栈 以便在整个数组空间中没有剩余空间之前堆栈不会溢出 对于在数组中实现 2 个堆栈 这是非常明显的 第一个堆栈从左到右增长 第二个堆栈从右到左增长 当 stackTop
  • Android Firebase - 无法使用 getUid() 获取用户 ID - 错误:空对象引用

    我正在使用 Firebase 并且注册 登录活动工作正常 但我也希望每个用户更新用户名 看来我无法运行 firebaseRef getAuth getUid 我在应用程序模拟器中收到错误 不幸的是 应用程序已停止 这看起来像是我在 andr
  • jQuery Ajax 和重定向来自服务器的响应

    我有一种情况 我发送 jquery ajax post 请求 但在我的 web 应用程序中 该特定 ajax 请求的处理程序 处理 post 参数后 将调用另一个控制器中的操作 不确定这是否称为重定向 该操作基本上呈现整个网站页面 如页面刷
  • 将 struct.unpack 从 python 2.7 移植到 3

    以下代码在 python 2 7 中运行良好 def GetMaxNoise data max noise for byte in data noise ComputeNoise struct unpack B byte 0 if max
  • Android Webview中视频只播放一次

    我成功地在 Android 中的 Webview 中播放来自 HTML5 内容的流式 Youtube 视频 但现在的问题是视频仅在第一次播放 在那之后VideoView仅转到视频文件的末尾 我尝试按照建议清除缓存here但没有运气 这个问题
  • DownloadFile 与 DownloadFileAsync

    我正在使用 WebClient DownloadFile 从 Web 服务器一次下载一个文件 但是 我想知道 线程被阻止 开发人员是否意味着应用程序不会响应 我尝试使用 WebClient DownloadFileAsync 但它不像 Do