我读了很多文章,但仍然无法理解这部分。
考虑这段代码:
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 上运行,但在单独的线程上运行,还是在单独的线程上运行,并且单独在该方法内异步运行?
- 创建异步方法的目的是让您稍后可以等待它们。有点像“我要把水烧开,准备好剩下的汤料,然后回到锅里等待水沸腾,这样我就可以做晚饭了。”你开始让水沸腾,它会在你做其他事情时异步进行,但最终你必须停下来等待它。如果您想要的是“一劳永逸”,则不需要 Async 和 Await。
在 C# 中执行即发即忘方法的最简单方法? https://stackoverflow.com/questions/1018610/simplest-way-to-do-a-fire-and-forget-method-in-c
- 启动一个新任务会将该任务排队以在线程池线程上执行。线程在进程的上下文中执行(例如,运行应用程序的可执行文件)。如果这是在 IIS 下运行的 Web 应用程序,则该线程是在 IIS 工作进程的上下文中创建的。该线程与主执行线程分开执行,因此无论您的主执行线程在做什么,它都会关闭并执行其操作,同时,您的主执行线程继续执行自己的工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)