如何异步这个长时间运行的方法?我有一个我想异步运行的方法,这样我就可以在它运行时做其他事情。它不依赖于任何其他异步方法(它不调用其他资源、下载文件或任何东西)。如果可能,我想避免使用newTask()、Task.Factory.StartTask()和Task.Run()。是否可以使用干净、可读的代码并且不显式使用Task异步运行此方法?如果不是,异步运行该方法的最简单方法是什么?注意:请不要关心该方法中的愚蠢逻辑——我将其归结为故意变慢但不显示我的实际代码。publicstaticvoidmain(string[]args){RunMySlowLogic();}privatevoidRunMySlowLogic(){while(true)for(inti=0;i<100000000;i++)if(i==newRandom().Next(999))returntrue;目前,我认为我需要将方法包装在lambda或Task中并将其标记为异步。等待去哪儿了?你混淆了两个不同的东西。你可以在后台运行它,这个方法可以是异步的。这是您的方法可以做的两件不同的事情,或两者兼而有之。如果您在该方法中执行异步操作,例如Task.Delay或某些非阻塞I/O,则调用该方法,等待返回的任务并使方法本身异步:asyncTaskRunMySlowLogicAsync(){while(true){//...awaitTask.Delay(1000);如果你没有这样的东西,那么你的方法不是异步的,它是同步的。在使用Task.Run做其他事情时,您仍然可以在不同的(ThreadPool)线程中在后台运行它:vartask=Task.Run(()=>RunMySlowLogic());有多种异步执行代码的方法。查看MSDN的异步编程模式。我们的使命是让您的工作更轻松。我认为避免使用Tasks的唯一正当理由是当您的目标是旧版本的.NET时。所以没有任务,你可以自己启动一个线程,或者使用一个线程池(任务在内部完成)。以上就是C#学习教程:Howtoasynchronizedthislong-runningmethod?分享的所有内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——publicstaticvoidmain(string[]args){varare=newAutoResetEvent(false);ThreadPool.QueueUserWorkItem(RunMySlowLogicWrapped,are);//在这里做一些其他的工作are.WaitOne();}//你必须匹配WaitCallback委托的签名,我们可以用它来进行跨线程通信privatevoidRunMySlowLogicWrapped(Objectstate){AutoResetEventare=(AutoResetEvent)state;RunMySlowLogic();are.Set();}privateboolRunMySlowLogic(){while(true)for(inti=0;i<100000000;i++)if(i==newRandom().Next(999))returntrue;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
