2011-09-30 31 views
2

当我看到关于等待第一条新闻,我感到非常兴奋,我想使用它的很多方面。 其中之一就是在我的web框架中使用它来隐藏客户端/服务器交换的异步方面,就像它在几个框架中完成的一样。 因此,这里的交易:覆盖连续状态存储/恢复算法?

我想编写这样的事情:

{ 
    Page p = new Page(); 
    FormResponse response = await p.Show(); 
    var field1 = reponse.inputField["input1"]; 
    ... 
} 

我想开发要能写在服务器上的代码。正如你猜p.Show()写在HttpResponse对象的HTML代码的形式显示在页面上,并传送到客户端的响应,因此,线程是 打死,我从来没有达到,下一条指令(FormResponse response =)。

因此,这里是我的问题: 有没有做这样的事的方法吗?我知道等待切割代码,继续打包它,为我们做封闭,并在p.Show()完成时将它存储在某个地方以便回调它。 但是在这里,线程将被杀死,这是我的代码,它接收来自Page的提交响应,必须处理它。所以我必须恢复“等待”创建的延续并自己执行。

我收到高或是否有可能?

编辑:额外的相关信息

我解释一点,但我们需要的例子。 想象一下,您希望对web服务进行异步调用,您只需使用await然后调用Web即可。 一个网不显示任何页面时,它返回的信息,您可以继续下一个指令,所以用一个网,我们有:客户端 - >服务器A [-callwebs->服务器B - >]服务器A - >客户端。现在,设想一个网络必须显示用户界面以从用户那里获取一些信息,我们可以将这种网络称为UIwebs(由多个webapp调用的可重复使用的接口),它显示UI,抓取信息,并将其发回给调用者。我们有:客户端 - >服务器A [-response_redirect->客户端-get->服务器B(这里是UIwebs,客户端输入什么)-response_redirect->客户端-get->]服务器A - >客户端

我把括号之间具有由developper的方式来处理:

这样一个经典的网,我能想象异步页“沉睡”等待腹板至反应,但有了UI网页,我们必须响应重定向到客户端,因此该页面是为asp.net完成的,并且SynchronizationContext表示没有更多的异步指令需要等待。

事实上,这里我需要的是一样打开Web服务器上,并发送请求给它至极承担责任:水灾只恢复的await后执行的代码所需要的一切。

问候, 朱利安

回答

0

我不知道是什么问题。

如果您有,例如,ASP.NET异步页面,则任何顶级(async void)函数都会正确地通知ASP.NET该页面不完整并释放该线程。稍后,继续将在(可能是另一个)线程上运行,恢复请求上下文并完成请求。

async设计是仔细完成,以确保这种确切的行为。特别是,async void增加了SynchronizationContext中的未完成异步操作计数,正如我描述的in a recent MSDN article

如果您正在运行自己的主机(即不使用ASP.NET),则必须实施SynchronizationContext。这不是微不足道的,但也不是非常难。一旦完成,asyncawait将“正常工作”。 :)

响应更新的答案编辑:

记住await/async只是语法糖;他们没有启用以前不可能的任何事情 - 他们只是让事情变得更容易。

如果我正确理解您的情况,您希望Web服务返回一个UI,然后对其进行响应。这是HTTP工作的反转,所以你必须用viewstate做一些时髦的东西。我会考虑它...

+0

我完成了我的问题:) – vans