- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到了an example forever iframe
实现( cometd 模拟),所以我决定对其进行测试,但添加了异步方法,这样就不会出现阻塞。
很简单:
我有一个带有隐藏 iframe
的页面 (index.html
) 其 SRC 为 AdminPush.aspx
:
/*1*/ protected void Page_Load(object sender, EventArgs e)
/*2*/ {
/*3*/ UpdateMessage();
/*4*/ }
/*5*/
/*6*/
/*7*/ protected void UpdateMessage()
/*8*/ {
/*9*/ HttpContext.Current.Response.ContentType = "text/html";
/*10*/ Response.Write("<script >parent.UpdateMessage(DateTime.Now.Second)</script>");
/*11*/ Response.Flush();
/*12*/
/*13*/ //async part goes here !!
/*14*/ this.RegisterAsyncTask(new PageAsyncTask(async cancellationToken =>
/*15*/ {
/*16*/ await Task.Delay(2000, cancellationToken);
/*17*/ UpdateMessage();
/*18*/ }));
/*19*/ }
在 AdminPush.aspx
页面上我添加了:
Async="true"
在 html 页面 (index.html
) 我添加了:
function UpdateMessage(Message)
{
console.log(Message);
}
function setupAjax() //body Onload - calls it.
{
var iframe = document.createElement("iframe");
iframe.src = "adminpush.aspx";
iframe.style.display = "none";
document.body.appendChild(iframe);
}
所以基本上 iframe 被注入(inject)了脚本命令,它更新了 iframe 的父级 index.html
。
它正在工作。
但是当我测试它时 - 它在 45 秒后停止更新。
我认为它与 web.config 中的 requestTimeout 属性有关 - 但事实并非如此。
这与 AdminPush.aspx
页面中缺少的 AsyncTimeOut
属性有关。
问题 #1:
根据 msdn异步超时:
Gets or sets a value indicating the time-out interval used when processing asynchronous tasks.
但它也说:
A TimeSpan that contains the allowed time interval for completion of the asynchronous task. The default time interval is 45 seconds.
请注意我每次“延迟”2秒
起初我将超时设置为 1 分钟,但后来也失败了。我认为超时应该与 each operation 相关,而不是 sum(all async operations)
为什么会这样?它应该是异步任务超时! (单个)但它表现为 sum(tasks)
这里的措辞具有误导性。任何澄清?
问题 #2:
我需要将它设置为max 值。 什么那个值是什么?但是,我仍然需要它支持浏览器很长时间。所以恐怕这个值也无济于事。
有什么方法可以重置这个值(在 n 个周期后)?
我知道还有其他解决方案/库(如 signalR)正在做这项工作,但它并不妨碍学习其他东西是如何完成的。
最佳答案
异步页面的想法是释放 IIS,以便可以为更多用户提供服务,如果您创建一个“永不”完成的页面,您将耗尽所有资源。
话虽如此...如果您还想这样做...
我们“知道”(文档),异步页面通过将页面的执行分成 2 部分来工作......后台任务之前的所有内容和任务之后的所有内容,这样 IIS 可以在后台任务完成时处理更多请求他们的工作。 (还有更多,但现在就足够了)
所以...他们“必须”正在创建某种任务管理器(如根/主任务)来执行所有按顺序注册的任务,这样 IIS 开始处理页面,启动任务管理器,释放 IIS,任务管理器继续处理任务,当它完成时,它将控制返回给 IIS。
这可以解释为什么 AsyncTimeout 控制所有已注册的任务而不是一个一个地控制(超时实际上应用于任务管理器)。
我用 6000 秒的超时测试了你的代码的一个变体并且它有效:
C#:
protected void Page_Load(object sender, EventArgs e)
{
Page.RegisterAsyncTask(new PageAsyncTask(ProcessTask));
}
protected async Task ProcessTask()
{
await Task.Delay(1000);
Response.Write(DateTime.Now.ToLongTimeString() + "<br/>");
Response.Flush();
Page.RegisterAsyncTask(new PageAsyncTask(ProcessTask));
}
aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Sample03.Default" Async="true" AsyncTimeout="6000" %>
希望对您有所帮助。
关于asp.net - Page.AsyncTimeout - 无限超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23404212/
我有 3 个列表项,每 3 秒向上旋转一次。我正在使用 transformY 属性来做这件事。问题是,当它到达最后一个元素时,它会循环返回,从而产生重新开始的效果。 如何通过在最后一项之后继续向上旋转
我如何制作一个处理旋转的无限/重复世界,就像在这个游戏中一样: http://bloodfromastone.co.uk/retaliation.html 我通过具有这样的层次结构对我的旋转移动世界进
这个问题已经有答案了: Using explicitly numbered repetition instead of question mark, star and plus (4 个回答) 已关闭
程序说明: I have this program of mine which is intended to read every word from a file (large one) and t
while 循环应该比较这两个对象的 ibsn。正在比较的对象: list[0] = new ReadingMatter ("Words and Stuff", "9-082-1090-1");
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我完全被屏蔽了。我尝试修改 C 中的“警报”信号,以便在秒数到期时读取一个简单的变量。我的代码如下: 在主要部分: int semnal; signal(SIGALRM, alarmHandle
我正在接受多行信息(字符串,直到我稍后解析它们)。例如: 1 5 0 2 9 6 2 9 1 我编写这段代码来分隔行,因为我将不得不以某种方式操作每一行。 Scanner scan = new Sca
我不熟悉 jQuery,并且我有多余的 jQuery 调用,我想将它们放入循环中。 $('.class1').on('click', function () { ... $('.class2').on
我有一个树结构,其中每个节点都有 5 个子节点,并且不允许超过 5 个。我希望以广度优先搜索的方式遍历这棵树。 现在我想使用广度优先搜索方式从选定的父节点计算空节点。 例如 如果给定的父节点为 1,则
目标/动机 我想写一个服务,它应该一直运行。但是当服务已经运行时,应该不可能再次启动该服务。 用例 用户 X 打开页面 myService.php 并通过单击页面上的按钮启动服务。之后关闭浏览器。一段
我正在尝试编译 shogun 工具箱,但遇到了这个错误 C:/shogun-3.0.0/shogun-3.0.0/src/shogun/../shogun/mathematics/Math.h
需要学校的 JavaScript 作业帮助,但不知道该怎么做,希望得到一些提示? 我们应该创建一个 6 面掷骰子程序,用户可以选择应该掷多少个骰子,最少 1 个和最多 5 个骰子。 所用骰子数量的总和
我在无限 ScrollView 中有 5 张图片。 因此,为了使 scrollView 无限/循环,我将图像定位如下: 5 1 2 3 4 5 1含义:最后一张图片第一张图片第二张图片.....最后一
我正在使用 ExTwitter库,并希望能够偶尔终止对流式 API 的调用以更改参数。 我当前的代码看起来像这样: for tweet #finished end 关于elixir - 如何中断(无
我想每 3 秒更改一次 div 的背景。这需要循环,因此一旦最后一个背景图像显示,它就会循环回到第一个背景图像,依此类推。我在这样做时遇到了麻烦。 我之前发过一篇文章,内容非常模糊,没有得到帮助。
我在做this教程,无法让我的页面正确加载。我不断在控制台中收到错误:[$rootScope:infdig]。 我对 Angular 很陌生,但从我读到的内容来看,我在某个地方有一个无限循环。我预计它
所以我试图创建一个无限的 asyncIterator/生成器。该代码应该为“for wait of”循环生成“Hello”和“Hi”,然后永远等待下一个值。问题是它不等待第三个值,也不在循环后打印 2
下图显示了我如何在 HTML5/JS 中制作无限背景滚动。我的连续背景由 X block Canvas 组成。我将在到达下一个 Canvas 之前立即渲染它,并释放上一个 Canvas。这里的问题是动
作为一个业余项目,我正在研究一些自制的素数生成问题,尝试编写一些不同的实现作为自学 C 和 C++ 的方法。当然,生成低素数的最快方法是已经拥有它们,所以我想着手建立一个硬盘素数列表数据文件。我想编写
我是一名优秀的程序员,十分优秀!