c# - 是 Controller 异步中的后台 worker 吗?

标签 c# asp.net-mvc asp.net-mvc-2

在 asp.net mvc 2 Controller 中,我有以下代码:

using (BackgroundWorker worker = new BackgroundWorker())
                        {
                            worker.DoWork += new DoWorkEventHandler(blah);
                            worker.RunWorkerAsync(var);
                        }

我的问题是:这段代码是异步的,这意味着它启动一个新线程并且 Controller 在“blah”并行执行时返回 View ?

如果没有,我将如何实现这些结果?

最佳答案

在 MVC 2 中有一个称为 AsyncController 的新功能,它是在 MVC 中执行异步调用的正确方法。您的 Controller 应该继承自 AsyncController 而不是 Controller 。那么你的主要操作方法名称应该在末尾有“Async”。例如,如果您有一个名为 Blah() 的操作方法,则改为在 BlahAsync() 中命名,这将被框架自动识别(并使用 BlahCompleted() 进行回调):

public virtual void BlahAsync()
{
    AsyncManager.OutstandingOperations.Increment();
    var service = new SomeWebService();
    service.GetBlahCompleted += (sender, e) =>
        {
            AsyncManager.Parameters["blahs"] = e.Result;
            AsyncManager.OutstandingOperations.Decrement();
        };
    service.GetBlahAsync();
}

public virtual ActionResult BlahCompleted(Blah[] blahs)
{
    this.ViewData.Model = blahs;
    return this.View();
}

这里有更多关于 AsyncController 的信息:MVC AsyncController

关于c# - 是 Controller 异步中的后台 worker 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561610/

相关文章:

asp.net-mvc - 我应该如何处理 ASP.NET MVC 部分 View 的异常?

c# - 如何在 Asp.net Mvc 网站上存储用户事件?

C#,在 Windows 服务的 OnStart 中调用异步方法

c# - 无法捕获的 AccessViolationException

C# 使用线程关闭程序/表单

c# - Entity Framework Powertools 使用 Mysql 和 EF6 生成 View

c# - 验证 Ajax 加载的表单 - 返回验证摘要

c# - 在哪里放置访问数据库的方法

asp.net-mvc - MVC 使用 Action Filter 检查 URL 中的参数。停止执行操作

asp.net-mvc-2 - 为什么登录后user.Identity.Name为空? ASP.NET MVC 2.0