当我看到第一个关于 await 的消息时,我非常兴奋,我想了很多方法来使用它。其中之一是在我的 Web 框架中使用它来隐藏客户端/服务器交换的异步方面,就像它在几个框架中所做的那样。所以这里是交易:
我想写这样的东西:
{
Page p = new Page();
FormResponse response = await p.Show();
var field1 = reponse.inputField["input1"];
...
}
我希望开发人员能够在服务器上编写此代码。正如您猜测p.Show()
的那样,在 HttpResponse 中写入显示带有表单的页面的 html 代码,并将响应发送到客户端,因此,线程被终止,我永远不会到达下一条指令(FormResponse response =
)。
所以这是我的问题:有没有办法做这样的事情?我知道 await 剪切代码,将其打包,为我们关闭,并将其存储在某个地方以便在 p.Show() 完成时将其回调。但是在这里,线程将被杀死,这是我的代码,它接收来自 Page 的提交响应,它必须处理它。所以我必须恢复“等待”创建的延续并自己执行它。
我变高了还是有可能?
编辑:附加信息
我可以多解释一点,但我们需要一个例子。想象一下,您想对 web 服务进行异步调用,您只需使用 await 然后调用 web。网络不显示任何页面,它返回信息片段,您可以继续下一个指令,因此对于网络,我们有:客户端 -> 服务器 A [-callwebs-> 服务器 B ->] 服务器 A -> 客户端。
现在,想象一个必须显示用户界面以从用户那里获取一些信息的网络,我们可以将这种网络称为 UIwebs(由多个 webapp 调用的可重用界面),它显示 ui,获取信息,然后发送它返回给调用者。
因此,对于 UI 网络,我们有:客户端 -> 服务器 A [-response_redirect-> 客户端 -get-> 服务器 B(这里是 UIweb,客户端输入任何内容)-response_redirect-> 客户端 -get-> ] 服务器 A ->客户
我放在括号中的内容必须由开发人员处理:
所以对于经典的网络,我可以想象异步页面正在“休眠”等待网络响应,但是对于 UI 网络,我们必须响应并重定向到客户端,所以页面是为 asp.net 完成的,SynchronizationContext 说没有更多的异步指令等待。
事实上,我在这里的需要就像打开 Web 服务器,并向它发送一个请求,以便在等待之后恢复执行代码所需的一切。
问候,朱利安