0

我正在使用 Asp.net MVC 4,并且我试图在用户单击页面上的链接时在后台运行一个函数。

我已经搜索和搜索,我不知道该怎么做。

我正在尝试运行的函数是 中的一个函数PhoneNumbersController,它不返回任何内容,它只是做了很多工作。

基本上,用户输入电话号码列表(非常多的号码),然后点击 go。

然后,服务器会将所有这些电话号码保存到数据库中。然后我希望服务器运行类似这样的功能:

    Foo(int accountId)
    {
        var account = GetAccountById(accountId);

        while (account.IsRunning)
        {
            var Number = (from n in account.PhoneNumbers
                          where n.Status = "new"
                          select n).FirstOrDefault();
            // Do some work on Number.

            Thread.Sleep(1000); // I'm working with an API that limits you to 1 per second.

            account = GetAccountById(accountId);
        }
    }

我知道,那个代码很糟糕,但这只是为了展示一个例子。

我可能会运行至少 100,000 个数字,所以我们必须能够暂停和恢复这个(因此是 while(IsRunning) 变量。我有一个暂停函数,可以将该值设置为 false。

作为以前从未使用过异步请求或多线程的人,这里最好的选择是什么,我将如何去做?

提前致谢!

4

2 回答 2

1

编辑:阅读下面的评论,这个解决方案似乎只适用于短任务,因为应用程序池可能会杀死创建的线程

您可以简单地创建一个后台线程:

var t = new System.Threading.Thread(() => Foo(yourAccountId)) {IsBackground= true};

并运行它:

t.Start();
于 2013-09-26T06:39:56.403 回答
0

在我看来,在 ASP.NET 网站中为此创建一个新线程是不必要的。每个客户端请求都在 ISS 的一个线程中处理。

但是,如果这个过程真的从网络服务器上花费了太多时间,我对此表示怀疑。您总是可以将实际工作委托给另一个系统。

于 2013-09-26T06:44:20.887 回答