C#5中新的异步/等待功能如何与消息循环集成?

Gro*_*kys 8 c# asynchronous async-await async-ctp

我没有机会查看新的C#async/await功能的CTP,但是我想知道的是:

它如何与消息循环集成?我假设在标准的Windows应用程序(Winforms,WPF)中,通过使用Dispatcher或类似程序将消息发送到应用程序的消息循环来调用延续?

如果我没有使用标准的Windows消息循环怎么办?例如,在GTK#应用程序或控制台应用程序中(如果在控制台应用程序中确实可以使用此功能).

我在互联网上搜索了有关这方面的信息,但无济于事.谁能解释一下?

Han*_*ant 5

它使用System.Threading.SynchronizationContext.Current.WPF和Winforms都安装了自己的SynchronizationContext版本.使用他们的消息循环来编组从工作线程回到主UI线程的调用.分别使用Dispatcher.Begin/Invoke和Control.Begin/Invoke().

在控制台模式应用程序中完成此操作并不容易,其主线程没有明确定义的"空闲"状态,允许以安全的方式注入封送的方法调用,以避免重新进入头痛.你当然可以添加它,但你将重新发明消息循环这样做.

  • [AsyncEx](http://nitoasyncex.codeplex.com/)包含[AsyncContext](http://nitoasyncex.codeplex.com/wikipage?title=AsyncContext)类,该类为控制台应用程序提供异步兼容的主循环(和单元测试). (3认同)