Async/Await使用Task.Run异步启动新线程?我已经阅读了很多文章,但仍然无法理解这部分。考虑以下代码:privateasyncvoidbutton1_Click(objectsender,EventArgse){awaitDosomething();}privateasyncTaskDosomething(){awaitTask.Run((()=>"DoWork"));返回“我完成了”;第一个问题:当我单击按钮时,它会调用DoSomething并等待通过调用Task.Run(如果我没记错的话)从线程池中创建线程的任务,并且它全部异步运行。所以我实现了创建一个线程来完成我的工作但它是异步的吗?但是考虑到我不需要任何结果,我只想完成工作而不得到任何结果,是否真的需要使用async/await,如果需要,如何使用?第二个问题:异步运行线程时如何工作?它是在主UI上运行但在单独的线程上运行,还是在单独的线程上运行并且在该方法中是异步的?创建异步方法以便稍后可以等待它们。有点像“我要把水烧开,准备好剩下的汤料,然后回到锅里等水烧开,这样我就可以做晚饭了。”你开始烧水,当你在做其他事情时它是异步的,但最终你必须停下来等待它。如果您想要的是“即发即弃”,那么您就不需要Async和Await。在C#中执行即用即忘方法的最简单方法是什么?启动新任务会将任务排队以在线程池线程上执行。线程在进程的上下文中执行(例如,运行应用程序的可执行文件)。如果这是在IIS下运行的Web应用程序,线程将在IIS工作进程的上下文中创建。该线程与执行的主线程分开执行,因此无论执行的主线程在做什么,它都会关闭并执行其操作,而您的主执行线程继续执行其自己的工作。Task类型要求您从任务返回TResult。如果您没有任何要返回的内容,则可以使用Task(顺便说一句,它是Task的基类)。但请记住,任务不是线程。任务是要做的工作,线程是工人。当你的程序运行时,工作和工人变得可用和不可用。在幕后,库将您的工作分配给可用的工作人员,并且由于创建新工作人员是一项昂贵的操作,因此通常最好通过线程池重用现有工作人员。1如果你不等待任务或等待它,那么它会产生很大的不同:所以对异步/等待的需要将取决于你想如何调用DoSomething:如果你不等待它就像调用它火-忘记的方式。2它是在主UI上运行但在单独的线程上运行,还是在单独的线程上运行并且在该方法中是异步的?异步代码有时意味着其他线程(请参阅此问答异步与多线程-有区别吗?)。也就是说,如果代码在与UI不同的线程中执行,或者它允许在恢复时在UI线程上继续处理,这很好,因为UI循环仍然可以更新屏幕,而其他任务并行完成而不会冻结用户界面。异步方法(即异步方法)是一种语法糖,用于告诉编译器应将await语句视为状态机。C#编译器将您的异步/等待代码转换为状态机,等待任务结果的代码在等待的代码之后执行。有趣的问答你可能想看看这些其他的问答:OP说……[……]但这是否意味着“async/await”会触发一个线程,Task.Run也会触发一个线程,或者它们都是同一个线程?使用async-await并不意味着“我创建了一个线程”。以优雅的方式实现延续只是语法糖。任务可能是也可能不是线程。比如Task.FromResult(true)创建一个faketask,这样就可以在不创建线程的情况下实现异步方法:以上是C#学习教程:Async/AwaitUseTask.Runtostartanewthreadasynchronous?所有分享的内容,如果对你有用,需要进一步了解C#学习教程,希望你多多关注——publicTaskSomeAsync(){//这样,这个方法要么决定它的代码是否是asynchronous或//synchronous,但调用者仍然可以等待它!返回Task.FromResult(true);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
