我正在使用Asp.net MVC 4,并且我试图在用户单击页面上的链接时在后台运行一个函数。异步运行MVC控制器中的长时间运行功能
我已经搜索和搜索,我不知道该怎么做。
我试图运行的函数是PhoneNumbersController
里面的一个函数,它不返回任何东西,它只是做了很多工作。
基本上用户输入一个电话号码列表(非常大量的数字),然后点击去。
服务器会将所有这些电话号码保存到数据库中。然后我想要服务器运行类似于此的功能:
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 。
正如有人谁绝不会与异步请求或者多线程工作之前,这将是最好的选择在这里,我将如何去它
在此先感谢
你看过异步/等待? – christiandev
我已经看过它,但在这一点上它已经超出了我的头。在我的脑海中,我觉得应该有一种方法来说“在后台异步运行这个函数”,而且看起来并不是这样。 –
使用异步,你可以添加多线程电源到一个请求,但每次异步都会在你返回响应的时候完成 – Kristof