sas*_*alm 6 .net c# asynchronous async-await
我最近讨论了async-await如何工作,我想知道我是否正确.
async-await是否通过将线程的ESP堆栈指针切换为指向不同的堆栈帧来工作?这类似于WINAPI光纤或旧的Win3.1协作式多任务处理.
例如,考虑以下代码:
int Foo() {
int y = ReadSomethingFromConsole();
int x = await DoSomethingAsync();
return x+y;
}
Run Code Online (Sandbox Code Playgroud)
调用堆栈看起来像这样:
EventLoop(...);
.......
Foo();
Run Code Online (Sandbox Code Playgroud)
在我们到达该await
语句时,计划在线程池中运行一个新任务,并await
立即将ESP指针切换为指向我们所在EventLoop()
函数的新堆栈帧.不会丢弃当前堆栈帧的内存段,只是ESP不再指向它.
然后事件循环运行更多事件,直到通知任务完成.此时,ESP切换到指向Foo()
功能的堆栈段.
我是否理解正确,这是如何工作的?
编辑:新的堆栈框架是如何创建的await
?是否复制了一些"模板"堆栈帧快照,类似于VM快照?
归档时间: |
|
查看次数: |
702 次 |
最近记录: |