问题标签 [asynccontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2957 浏览

c# - C# Async MVC 方法返回 ContentResult System.Threading.Tasks.Task`1[System.Web.Mvc.JsonResult]

我正在尝试将一些方法转换为异步,并从我正在修改的控制器中的一个简单示例开始:

当我测试方法而不是 Json 结果时,我得到了字符串值“System.Threading.Tasks.Task`1[System.Web.Mvc.JsonResult]”,我已经使用 Fiddler 和浏览进行了验证。

该项目已手动升级到.NET45。搜索表明这可能是程序集版本不正确的问题,但对项目文件和进程视图的检查表明在运行时引用并加载了正确的类型。

有没有人对此有任何调试提示?

谢谢。

0 投票
4 回答
18041 浏览

asp.net-web-api - ApiController 的异步方法——有什么好处?什么时候使用?

(这可能重复了问题ASP.NET MVC4 Async controller - Why to use?,但是关于 webapi,我不同意那里的答案)

假设我有一个长时间运行的 SQL 请求。它的数据应该被序列化为 JSON 并发送到浏览器(作为 xhr 请求的响应)。示例代码:

当我执行 $.getJson('api/data', ...) 时实际会发生什么(请参阅此海报http://www.asp.net/posters/web-api/ASP.NET-Web-API-Poster。 pdf ):

  1. [IIS] 请求被 IIS 接受。
  2. [IIS] IIS 等待托管池 ( http://msdn.microsoft.com/en-us/library/0ka9477y(v=vs.110).aspx ) 中的一个线程 [THREAD] 并开始在其中工作。
  3. [线程] Webapi 在该线程和其他类中创建新的 DataController 对象。
  4. [THREAD] 使用任务并行库在 [THREAD2] 中启动 sql-query
  5. [THREAD] 返回托管池,准备进行其他处理
  6. [THREAD2] 与 sql 驱动程序一起工作,在准备好数据时读取数据并调用 [THREAD3] 来回复 xhr 请求
  7. [THREAD3] 发送响应。

请随时纠正我,如果有什么问题。

他们说,在上面的问题中,重点和好处是,[THREAD2] 不是来自托管池,但是 MSDN 文章(上面的链接)说

默认情况下,并行库类型喜欢TaskTask<TResult>使用线程池线程来运行任务。

所以我得出一个结论,所有三个线程都来自托管池。

此外,如果我使用同步方法,我仍然会保持我的服务器响应,只使用一个线程(来自宝贵的线程池)。

那么,从 1 个线程交换到 3 个线程的实际意义是什么?为什么不只是最大化线程池中的线程呢?

是否有任何使用异步控制器的明显有用的方法?

0 投票
1 回答
1230 浏览

asp.net-mvc - AsyncController 的异步操作阻止请求而不是立即返回

这是我第一次使用 AsyncController (MVC3),我无法理解异步操作。我的任务是使用实体框架将适量的数据从 Excel 导入 SQL Server 数据库。我认为这符合异步操作的条件,因此我为此目的明确地编写了一个控制器。这是带有异步操作的控制器代码

我使用以下 JQuery 代码调用异步操作 (CampDonorImportAsync)

reportImportProgress javascript 函数调用 ReportImportProgress() 操作,该操作显示异步操作的当前进度。

问题是对 Async 方法 ( CampDonorImportAsync ) 的调用会阻止来自同一页面的其他请求,例如上面的ReportImportProgress()。我认为对 Async 操作的调用应该立即返回,以便可以发出其他请求,即使 Async 任务仍在进行中。我不确定为什么异步请求被阻止并等待任务完成,而不是立即返回。有任何想法吗 ?

0 投票
2 回答
463 浏览

asp.net-mvc-4 - AsyncController 用于运行控制台应用程序

有几个问题可以解决异步控制器的工作原理,但没有一个能完全解决我需要的问题。希望有人已经这样做了,如果我做错了什么,可以告诉我。

我有一个处理配置任务的 Web 应用程序和一个处理运行配置任务的控制台应用程序的组合。我希望能够通过单击按钮立即将控制权返回给用户并在后台执行任务来从 Web 应用程序运行任务。AsyncController 似乎是完美的匹配。两个应用程序都使用 EF6、Unity 依赖注入和 SQL Server 2012 访问同一个数据库。Web 界面的目标是 MVC4 上的 .NET 4.5。

我可以毫无障碍地完美运行控制台应用程序。我还可以使用以下代码从 Web 界面触发运行。唯一的问题是,当通过 Web 应用程序触发时,任务将运行到某个点(我可以在日志 (Nlog) 中看到它)但它会停止执行,直到我重建解决方案 - 解决方案包含两个应用程序,这也将替换 .正在运行的exe。当我直接运行控制台应用程序时,我没有任何暂停。

这是我第一次使用 Task,我对 Process 类也有点害羞。如果我正在做一些非常愚蠢的事情,请不要太苛刻。

这是控制器的代码:

依赖项:

  • taskProcessService:任务运行的每个事件的存储库
  • 上下文:保存有关当前用户的信息
  • taskService:任务的存储库

控制台应用程序 (.exe) 在完全完成后退出。正如我所提到的,当通过 Web 应用程序调用时,该任务只会在我重建应用程序时完成 - 此时它会完成它应该做的一切 - 似乎它一直在工作,它只是在某个时候停止记录或报告进行中。

也许这很重要 - 我在没有异步控制器的情况下再次尝试,但使用相同的设置 - 运行进程,包装在具有相同最终效果的任务中。我认为当主线程返回池时进程被杀死,这就是我尝试 AsyncController 的原因。

如果我打开任务管理器,我可以看到 exe 的进程在那里闲置。该应用程序记录了它的进度,但然后就坐在那里。这是VS的问题吗?我正在使用VS2012。

将流程包装成任务我错了吗?有没有办法通过 Task 类和 Action 类直接运行可执行文件?

非常感谢您的任何见解。

0 投票
1 回答
2070 浏览

java - 使用tomcat和spring进行异步http请求处理

这是我的第一个 SO 问题,所以请耐心等待我 :)

我正在尝试创建一个服务:

  1. 接收包含要查询的 URL 的 HTTP GET 请求
  2. 对于单个 GET 请求,服务会提取 URL
  3. 查询有关 URL 的本地数据库
  4. 如果在数据库中找到结果,它将返回给客户端,如果没有,则需要查询一些外部服务(这可能需要相对较长的时间来响应)
  5. 将 URL 的结果返回给客户端

我在虚拟机和 Tomcat7 上使用 spring 运行它。我会提前道歉并提到我对Tomcat很陌生

无论如何,我期待这个服务有很多并发的 GET 请求(数十万个同时请求)我基本上想要实现的是让这个服务尽可能地可扩展(如果这不可能,那么至少一个可以同时处理数十万个请求的服务)

我一直在阅读很多关于服务中的异步请求处理的内容,尤其是在 Tomcat 中,但我有一些我仍然不清楚的事情:

  1. 从官方 tomcat 网站看来,Tomcat 包含接受线程的数量和工作线程的数量。如果是这样,我为什么要使用 AsyncContext?释放 Tomcat 的工作线程并在我的应用程序中占用不同的线程来执行完全相同的操作有什么好处?(系统中还有 1 个活动线程)
  2. 有点类似于第一个问题,但是创建 AsyncContext 并将其与不同的线程一起使用有什么好处吗?(我的应用程序中创建的线程池中的一个线程)
  3. 关于同样的问题,我在这里看到我也可以返回 Callable 或 DeferredResult 并使用 Tomcat 的线程之一或我自己的线程处理它。与仅处理来自请求的 AsyncContext 相比,返回 Callable 或使用 DeferredResult 有什么好处吗?
  4. 另外,如果我决定返回一个可调用对象,Tomcat 会从哪个线程池获取线程来处理我的可调用对象?这里使用的线程是否与我之前提到的来自 Tomcat 的工作线程相同?如果是这样,我从发布一个 Tomcat 工作线程并改用另一个工作线程可以获得什么好处?
  5. 我从 Oracle 的文档中看到,我可以向 AsyncContext 传递一个将同时处理的 Runnable 对象,用于执行此 Runnable 的线程从何而来?我有控制权吗?此外,将 AsyncContext 传递给 Runnable 比仅将 AsyncContext 传递给我的线程有什么好处?

我很抱歉就同样的事情问了这么多问题,但我和我的同事们为这些事情争论了一个多星期,没有任何具体的答案。

我有 1 个更普遍的问题:您认为使我描述的服务可扩展的最佳方式是什么?(暂时不考虑添加更多机器),您能否发布任何示例或参考以用于特定的解决方案?

我会发布更多我一直在查看的链接链接,但我目前的声誉不允许这样做。对于任何可以理解的参考资料或具体示例,我将不胜感激,我显然很乐意澄清任何相关问题

干杯!

0 投票
1 回答
1016 浏览

asp.net-mvc-4 - 异步 ActionResult 实现被阻塞

好的,

在这里,我有一个 MVC 4 应用程序,我正在尝试在其中创建一个异步 ActionResult。

Objective : 用户在网页上有一个下载PDF Icon,下载需要很多时间。因此,当服务器忙于生成 PDF 时,用户应该能够在网页中执行一些操作。

(单击“下载 PDF”链接正在向服务器发送 ajax 请求,服务器正在获取一些数据并正在推回 PDF)

发生的事情是,当我调用 ajax 下载 PDF 时,它会启动该过程,但会阻止每个请求,直到并且除非它返回到浏览器。那是简单的阻塞请求。

到目前为止我所尝试的。

1) 使用 AsyncController 作为控制器的基类。

2) 将 ActionResult 制作为异步任务 DownloadPDF(),在这里我将整个代码/逻辑包装到一个包装器中以生成 PDF。这个包装器最终是 DownloadPDF() 中的一个可等待的东西

像这样的东西。

是的,操作是基于会话的。

我在哪里遗漏了一些东西吗?

0 投票
1 回答
191 浏览

c# - 无法访问 AsyncController 的构造函数中的 HttpContext 或 Request 对象

我正在使用AsyncController说“AbstractAbcContoller”

然后我还有 3 个控制器继承了新创建的AbstractAbcContoller.

现在,当我创建这 3 个控制器中的任何一个的构造函数并尝试访问 HttpContext/Request 对象时,我总是将它们设为 null。

我需要初始化接受 HttpRequestBase 作为其构造函数中的参数的服务对象。

我不得不接受这种解决方法。

然后在控制器/动作中使用类似这样的东西

我有点不喜欢,我不确定哪个会更好。请指教。

0 投票
0 回答
260 浏览

grails-3.0 - Grails 3.0 中的异步重定向

grails 3.0 控制器中的异步重定向失败。

以下是示例控制器片段;

异常的堆栈跟踪是这样的;

似乎这与休眠会话问题有关,但没有 GORM,我不知道如何防止它。

0 投票
1 回答
134 浏览

asp.net - AsyncController 中 Action 的继承

我有一个基础 AsyncController

继承和覆盖SomeMethod如何正确?

或者

PS对不起我的英语

0 投票
2 回答
1168 浏览

c# - ASP.NET MVC - 为什么这些异步任务会立即运行?

我有一个 ASP.NET MVC 异步操作方法,如下所示:

现在,当我调试并跳过tasks变量创建时,任务会立即执行。换句话说,当我将鼠标悬停tasksawait队列中时,他们会说“RanToCompletion”。

为什么?

据我了解,应该创建任务,但在被await Task.WhenAll(tasks)阻塞调用触发之前处于“WaitingForActivation”状态。

有人可以向我解释发生了什么吗?我以前写过这样的代码,它通常按预期工作,所以我想知道这是 ASP.NET 还是 ASP.NET MVC 异步控制器?

TIA。

编辑 如果我将代码更改为:

该方法按预期运行(任务直到 才执行await)。

在运行异步任务之前,我通常不需要这样做,这在 ASP.NET MVC 中是否需要?