【发布时间】:2013-11-27 14:21:37
【问题描述】:
所以,众所周知,asp.NET、WPF 和 WinRT 等框架会为您管理一个或多个线程。在 asp.NET 中,框架汇集了一组线程,这些线程从队列中获取请求并处理它们。在 WPF 中,框架为您管理 UI 线程,该线程从消息泵中获取消息。
这可以通过简单的生产者/消费者方法来实现,其中消费线程执行while(true) 循环,从队列中获取消息并使用消息处理程序(用户代码)来执行它们。很简单。你可以在这里找到一个基本的实现:https://stackoverflow.com/a/5828863/857807
通过引入 async/await 语义,您可以将 CPU/IO 密集型工作委托给其他线程,并让(例如)UI 线程保持响应。这意味着 UI 线程将继续从泵中获取消息。
我的问题是:从上述基本实现开始,消费者将如何实现呢?您怎么知道消息处理程序正在异步等待另一个线程完成并因此从队列中获取另一条消息?我确定我在这里遗漏了一些重要的东西。
【问题讨论】:
-
您是在问 WPF/etc UI 线程是如何做到这一点的,还是您自己如何在特定线程上做到这一点?
-
我确信框架的实际实现对我来说有点矫枉过正,我只是想知道它的要点。我不是想自己实现它,但出于好奇,我想知道如果我愿意的话我会怎么做。
标签: c# .net multithreading task-parallel-library async-await