4
我是使用C#在.Net中进行异步编程的新手。所有到目前为止,我已经明白的是:异步编程中的线程状态管理
随着异步编程,正在等待一个Web服务或数据库返回的数据被释放,直到接收到的数据来服务新的请求的线程。
一旦数据被接收,该线程重新启动并继续处理该呼叫之后到来的代码。现在
,我想详细了解如何状态的线程管理,以便它可以开始从异步调用被做了点执行。
如果它使用一个堆栈来处理这个问题,有人可以给我一个洞察过程吗?
感谢,
Mayank
你可以在这里看看:https://msdn.microsoft.com/en-us/library/mt674882.aspx – Yanga
一切的核心是谦卑的委托:结合了方法和对象的东西它被调用。从那里我们得到[闭包](http://stackoverflow.com/questions/428617/),并从闭包中获取async/await使用的状态机。当不使用委托对象时,必须显式传递状态(['IAsyncResult.AsyncState'](https://msdn.microsoft.com/library/system.iasyncresult.asyncstate)),但这不太常见。整本书都可以写在这个主题上,我很确定他们确实已经写了。 –
您的异步/等待代码实际上被转换为一个实现了'IAsyncStateMachine'的结构,该结构包含所有必要的上下文字段以及一个将在每个部分任务完成时调用的单个'MoveNext'方法。因此,如果您了解如何在任何其他实例方法上调用'BeginInvoke',则应了解状态是如何传递的。文艺青年最爱的;局部变量不放置在堆栈上,而是放置在一个结构中(实际上很快就被装箱并放置在堆上)。 – Groo