在C#中使用不带等待的异步?考虑在没有等待的情况下使用异步。想一想您可能误解了async的作用。警告是完全正确的:如果您将方法标记为异步但不在任何地方使用等待,那么您的方法将不是异步的。如果调用它,该方法中的所有代码将同步执行。我想编写一个应该运行异步但不需要使用等待的方法。例如,当使用线程时publicasyncTaskPushCallAsync(CallNotificationInfocallNotificationInfo){Logger.LogInfo("Pushingnewcall{0}with{1}id".Fill(callNotificationInfo.CallerId,}我想调用PushCallAsync并运行异步,不要我不想使用await。我可以在C#中使用异步而不等待吗?如果您的Logger.LogInfo已经是异步的,这就足够了:publicvoidPushCallAsync(CallNotificationInfocallNotificationInfo){Logger.LogInfo("Pushingnewcall{0}with{1}id".Fill(callNotificationInfo.CallerId,}如果它没有开始异步而不等待它publicvoidPushCallAsync(CallNotificationInfocallNotificationInfo){Task.Run(()=>Logger.LogInfo("Pushingnewcall{0}with{1}id".Fill(callNotificationInfo.CallerId));}你仍然误解了异步。异步关键字并不意味着“在另一个线程上运行”。要将某些代码推送到另一个线程,您需要显式执行它,例如Task.Run:awaitTask.Run(()=>Logger.LogInfo("Pushingnewcall{0}with{1}id".Fill(callNotificationInfo.CallerId));我有一篇关于async/await的介绍性文章,您可能会发现它很有用。您误解了async。它实际上只是告诉编译器传播它在幕后为您执行的控制流反转。这样然后整个方法堆栈被标记为异步。你真正想做什么取决于你的问题。(让我们考虑你对Logger.LogInfo(..)的调用是一个异步方法,因为它最终调用File.WriteAsync()左右.publicvoidPushCallAsync(CallNotificationInfocallNotificationInfo){returnLogger.LogInfo("Pushingnewcall{0}with{1}id".Fill(callNotificationInfo.CallerId);}或publicasyncvoidPushCallAsync(CallNotificationInfocallNotificationLog){LogwaaInfo("推送ID为{1}的新呼叫{0}".Fill(callNotificationInfo.CallerId);}如果Logger.LogInfo是同步方法,则整个呼叫仍将是同步的。如果您只想在单独的线程代码中执行此操作,那么异步不是完成这项工作的工具。请尝试使用线程池:以上是C#学习教程:在C#中使用async无需等待?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——ThreadPool.QueueUserWorkItem(foo=>PushCallAsync(callNotificationInfo));本文收集自网络,不代表立场。侵权请点击右侧联系管理员删除。如需转载请注明出处:
