【发布时间】:2013-07-01 09:12:55
【问题描述】:
我将我的 Xamarin.Android 应用程序切换为使用 async await 来代替之前的 ThreadPool.QueueUserWorker 项目使用情况,它看起来虽然没有指标,但速度更快!在这个新的 Xamarin Android 版本中显然可能还有其他优化,但我很好奇从 C# 的角度(.NET 4.5)如果事实上 Task.Run 会更快,因为它是按需启动任务而不是排队线程池?
任何人都知道异步等待可以并且将会比 ThreadPool.QueueUserWorkerItem 实现更快?
【问题讨论】:
-
async本身不使用其他线程。您是否可能只是偶然发现线程池得到了更好的使用?所以我的意思是减少线程争用,减少池饥饿等。 -
不,Task.Run 也使用线程池,除非您将其安排在特定的调度程序上。您实际上是在 call Task.Run 自己吗?如果我们能看到一些代码会有所帮助...
-
是的,我用以下代码包装我的代码:Return Task.Run( ()=> { code here });
-
问题(和可能的答案)如果它显示在哪里使用 async/await w.r.t. 会对其他人更有用。 Task.Run 调用。这是
await Task.Run(() => { ... DoStuff(); ... },还是Task.Run(() => { ... await DoStuff(); ... }?而faster可能表示UI is less laggy(但实际工作可能仍需要很长时间或更长),也可能表示the work completes faster。思考关于这个主题的有用问题和答案。
标签: c# threadpool .net-4.5 async-await xamarin