Async/Await 是否使用 Task.Run 异步启动新线程?

2024-03-25

我读了很多文章,但仍然无法理解这部分。

考虑这段代码:

    private async void button1_Click(object sender, EventArgs e)
    {
        await Dosomething();
    }

    private async Task<string> Dosomething()
    {
        await Task.Run((() => "Do Work"));
        return "I am done";
    }

第一个问题:

当我单击该按钮时,它将调用 DoSomething 并等待一个任务,该任务通过调用 Task.Run (如果我没有记错的话)从线程池创建一个线程,并且所有这些都是异步运行的。所以我实现了创建一个执行我的工作但异步执行的线程?但考虑到我不需要返回任何结果,我只是希望在不返回任何结果的情况下完成工作,是否真的需要使用 async/await ,如果需要,如何?

第二个问题:

当异步运行线程时,它是如何工作的?它是在主 UI 上运行,但在单独的线程上运行,还是在单独的线程上运行,并且单独在该方法内异步运行?


  1. 创建异步方法的目的是让您稍后可以等待它们。有点像“我要把水烧开,准备好剩下的汤料,然后回到锅里等待水沸腾,这样我就可以做晚饭了。”你开始让水沸腾,它会在你做其他事情时异步进行,但最终你必须停下来等待它。如果您想要的是“一劳永逸”,则不需要 Async 和 Await。

在 C# 中执行即发即忘方法的最简单方法? https://stackoverflow.com/questions/1018610/simplest-way-to-do-a-fire-and-forget-method-in-c

  1. 启动一个新任务会将该任务排队以在线程池线程上执行。线程在进程的上下文中执行(例如,运行应用程序的可执行文件)。如果这是在 IIS 下运行的 Web 应用程序,则该线程是在 IIS 工作进程的上下文中创建的。该线程与主执行线程分开执行,因此无论您的主执行线程在做什么,它都会关闭并执行其操作,同时,您的主执行线程继续执行自己的工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Async/Await 是否使用 Task.Run 异步启动新线程? 的相关文章

  • 如何在 Asp.Net Core 6 中向类型化 HttpClient 添加承载令牌身份验证

    我正在尝试使用 ASP Net Core 6 设置一个 Web api 以便用户可以到达我的端点 然后我使用特权帐户在幕后的 D365 中执行一些工作 我正在使用类型化的 HTTP 客户端 但我不确定如何插入承载身份验证 以便来自该客户端的
  • 为什么迭代器类型推导失败? [复制]

    这个问题在这里已经有答案了 为什么这在 C 中不起作用 为什么我不能限制foo的参数为std vector
  • ptrace和waitpid有什么关系?

    我正在练习使用ptrace但我不太了解它和之间的关系waitpid 这是我的测试程序 int main int argc char argv pid t pid 22092 if ptrace PTRACE ATTACH pid NULL
  • 这种对有效类型规则的使用是否严格遵守?

    C99和C11中的有效类型规则规定 没有声明类型的存储可以用任何类型写入 并且存储非字符类型的值将相应地设置存储的有效类型 抛开 INT MAX 可能小于 123456789 的事实不谈 以下代码对有效类型规则的使用是否严格符合 inclu
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 如何检查给定调用站点的重载决策集

    如何检查重载解析集 我在多个调用站点中使用了 4 个相互竞争的函数 在一个调用站点中 我期望调用一个函数 但编译器会选择另一个函数 我不知道为什么 这不是微不足道的 为了了解发生了什么 我正在使用enable if disable if打开
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • 是否可以在对Where 的调用中调用命名方法?

    我试图从 RedGate 的这本免费电子书中了解 Linq 的一些性能影响ftp support red gate com ebooks under the hood of net memory management part1 pdf f
  • C# SignalR 异常 - 连接在收到调用结果之前开始重新连接

    我正在开发 2 个应用程序 第一个是 C 控制台应用程序 另一个是 Asp net Web 应用程序 我正在使用 SignalR 连接两者 这是我的 C 控制台应用程序 客户端 public class RoboHub public sta
  • 我应该使用 Helgrind 还是 DRD 进行线程错误检测?

    好像Valgrind http valgrind org docs manual manual html有两个工具都可以进行线程错误检测 Helgrind http valgrind org docs manual hg manual ht
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • OpenSSL:无需 SSL_read() / SSL_write() 即可执行加密/解密

    我已经用 C 语言编写了一个基于事件的网络库 现在我想通过 OpenSSL 添加 SSL TLS 支持 而不是使用SSL read and SSL write 我宁愿让 OpenSSL 只执行传出 传入数据的加密 解密 让我自己传输 接收数
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • 在 C++ 中什么时候首选传递指针而不是引用传递?

    我可以想象一种情况 其中输入参数可以为 NULL 以便首选传递指针而不是传递引用 有人可以添加更多案例吗 在传递的对象实际上将被修改的情况下 有些人更喜欢传递指针 当对象通过引用传递时 它们使用 pass by const referenc
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • Cordova 上的 ClearCookiesAsync()

    我正在尝试使用 wp8 cordova 中的插件来清除 WebBrowser cookie 我已经让它与 JavaScript 进行通信 并且我的 c 文件中有类似这样的内容 using WPCordovaClassLib Cordova
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js

随机推荐

  • 如何返回正则表达式子匹配组,同时忽略空格?

    我正在寻找一些有关正则表达式的帮助 我拥有的数据是由逗号分隔的 5 个数字组成的组 那么 可能会有这样的数据 不带逗号的单个组 12345 任意数量的组 12345 54321 56789 09876 12345 54321 56789 或
  • 如果事件在 .NET 中作为委托实现,那么 .event IL 部分的意义何在?

    我在 Stack Overflow 上看到了一些非常好的问题 涉及委托 事件以及这两个功能的 NET 实现 特别提出一个问题 C 事件在幕后如何工作 https stackoverflow com questions 213638 how
  • CalendarView getDate 方法返回当前日期,而不是选定日期...我做错了什么?

    我的 calendarView 无法返回所选日期 而是返回一些始终指向今天的默认日期 我当然正在更改日历中选择的日期 并且它确实显示为已更改 我尝试在调试模式下检查视图 但没有发现任何内容 我在模拟器中运行它 而不是在真正的手机上 我应该修
  • 获取testng中@BeforeMethod和@AfterMethod中当前执行的@Test方法名

    我想打印当前正在执行的测试方法的名称 BeforeMethod and AfterMethod using testng Like public class LoginTest Test public void Test01 LoginPa
  • python 删除二叉搜索树中的节点

    下面的代码是我的二叉搜索树的实现 我想实现删除方法来删除节点 下面是我的实现 但是当我执行时 bst BSTRee bst insert 5 bst insert 11 bst insert 3 bst insert 4 bst inser
  • 为什么 XML 反序列化不会触发 OnDeserialization?

    我有一个问题 在三个小时的大部分时间里我一直在努力解决这个问题 我几乎可以肯定我错过了一些非常明显的事情 我有一个简单的 XML 文件
  • 更改 ViewController 时如何保持 UISwitch 状态?

    当我从一个视图控制器移动到另一个视图控制器时 第一个控制器上的开关会自行重置并且不保留其状态 在查看其他控制器后返回时如何使其保存状态 以及如何让它在关闭应用程序后保存其状态 我查看了各种 stackOverflow 问题和回复以及苹果文档
  • 节点上的 jwt - 客户端如何将令牌传回服务器

    okay 我认为我未能理解基于令牌的身份验证的基本部分 我正在使用带有express的节点 并使用jwt来阻止您尚未登录时访问我的网站 我可以在登录页面上创建一个令牌 然后我可以将其发送回客户端并将其存储在localStorage cook
  • 为什么程序(全局)作用域变量必须是 __constant?

    我是 OpenCL 新手 对这个限制感到非常困惑 例如 如果我想写一个LCG 我必须使状态字可以修改为rand and srand 在 ANSI C 中 我将使用以下方法来做到这一点 ANSI C static unsigned long
  • 按下“Tab”键时多次调用 textFieldShouldBeginEditing

    我有一个表单屏幕 其中包含 UITableView 内的多个输入字段 如果用户连接蓝牙键盘 则他可以按 Tab 键 问题是每个文本字段都会多次调用 textFieldShouldBeginEditing 方法 这是正常行为吗 正常的行为是
  • 水泥效果-艺术效果

    我希望给图像带来效果 其中生成的图像看起来就像是画在粗糙的水泥背景上 并且水泥背景在边缘附近自定义自身以突出显示它们 请帮助我编写一个算法来生成这样的效果 第一张图像是原始图像 and the second image is the out
  • 在 zendframework2 中验证日期

    嗨 我想验证 zf2 中的日期字段 形式 我设置 格式 选项来获取我需要的格式 但每次我验证它时都会出现错误 验证器看起来像这样 inputFilter gt add factory gt createInput array name gt
  • Inno Setup - 更新时删除旧的/过时的文件

    所以 我意识到这个问题以前已经被问过 事实上 在写这篇文章之前 我读了其中的 10 篇文章 但没有一个有适用的解决方案 我希望现在有人已经找到了一些东西 问题 我的程序是使用脚本构建的 在单个文件夹中创建所有最终文件 这些文件包含在 inn
  • 使用 VBA 访问 Outlook 中的文件夹

    我正在使用以下命令将邮件移动到 Outlook 中的文件夹 Dim chemin as String chemin Split path Set myNameSpace Application GetNamespace MAPI Set m
  • 将 Image 数据类型转换为 Base64 并将 Base64 转换为 Image 数据类型

    我在 MS SQL 2012 中使用数据类型 Image 来存储图像 问题 我在 C 中的 BASE64 字符串中有一个图像 9j 4AAQSkZJRgABAQEASABIAAD 4SKhRXhpZgAATU0AKgAAAAgABwESAA
  • 有没有办法让一个对象在 Windows UA 中占据多个网格?

    我正在尝试制作我的第一个应用程序 但我在网格方面遇到了一些问题 我试图将屏幕的左侧设为地图 将右侧设为 2 个框 网格 我不确定是否有办法在多个网格中拥有一个对象 或者如何设置这样的布局 基本上是一个 左线消失了 到目前为止 这是我获得的布
  • 如何创建弹跳div动画

    我正在尝试重新创建弹跳箭头动画 如下所示 http www codecomputerlove com http www codecomputerlove com 但进展并不顺利 我尝试使用 Layerslider 中的内置动画最接近的内容可
  • 带有 标签的 SVG 不可见

    我对 SVG 还比较陌生 我一直在探索各种在线呈现它们的方法 每个似乎都有自己的优点和缺点 但
  • 将文本添加到行尾而不加载文件

    我需要将信息以许多字典的形式存储到一个非常大的文件中 这并不重要 只是说我试图首先将所有数据放入这些字典中 但我耗尽了内存 60Gb 很好 所以我想通过在行上执行循环并向每行附加一些文本来将数据添加到文件中 而不实际将其加载到内存中 那可能
  • Async/Await 是否使用 Task.Run 异步启动新线程?

    我读了很多文章 但仍然无法理解这部分 考虑这段代码 private async void button1 Click object sender EventArgs e await Dosomething private async Tas