我很好奇异步等待线程内部结构。异步等待线程内部结构
每个人都表示异步在性能方面比较好,因为它释放了正在等待长时间异步调用响应的线程。 好吧,我明白了。
但让我们来考虑这种情况。
我有一个异步方法在数据库上执行异步操作。 数据库的api暴露函数BeginQuery和事件QueryCompleted。 我用一个任务(使用TaskCompletionSource)包装了它们。
我的问题是调用BeginQuery和触发事件QueryCompleted之间的内幕。
我的意思是 - 是否需要培育某种工作人员来开展活动?在非常低的级别,它必须是一些同步循环,阻止来自db的线程读取结果。
我想,任何异步调用都必须生成一个线程来实际处理响应(也许等待它在驱动程序代码中的低级C++循环中)。
所以我们唯一的“收获”就是当其他线程正在工作时,调用者线程可以被释放。
调用异步方法是否总是创建一个新的工作线程?
有人可以证实我的理解?
我不认为“每个人都表示异步在性能方面更好”。异步/等待可以使应用程序更具响应性,因为它可以更轻松地使用用户界面的任务和延续。 – Dirk
异步/等待是比线程更高层次的抽象。这些操作在SynchronizationContext上同步,并且引擎的实现可能会或可能不会创建额外的线程。见例如[这是所有关于SynchronizationContext](http://msdn.microsoft.com/en-us/magazine/gg598924.aspx)。 – GSerg