C# ASP.NET多线程
我有一个ASP.NET页面,它向用户列表发送电子邮件-这个列表可能相当大,我们发现ASP.NET页面经常会超时 我们要做的是在一个新线程中发送这些电子邮件,这样当电子邮件进程在后台工作时,ASP.NET页面将刷新给用户 不过,我很难弄清楚我需要做什么。以下是当前我的ASP.NET页面上的按钮单击事件:C# ASP.NET多线程,c#,asp.net,multithreading,C#,Asp.net,Multithreading,我有一个ASP.NET页面,它向用户列表发送电子邮件-这个列表可能相当大,我们发现ASP.NET页面经常会超时 我们要做的是在一个新线程中发送这些电子邮件,这样当电子邮件进程在后台工作时,ASP.NET页面将刷新给用户 不过,我很难弄清楚我需要做什么。以下是当前我的ASP.NET页面上的按钮单击事件: protected void btnSend_Click(object sender, EventArgs e) { //Populate form dat
protected void btnSend_Click(object sender, EventArgs e)
{
//Populate form data session
_FormInfo = new Dictionary<string, string>();
_FormInfo.Add("Name", txtName.Text);
_FormInfo.Add("Postcode", txtPostcodeDone.Text);
PostcodeSearcher.PostcodeEmailer(_Companies, _FormInfo);
mv.ActiveViewIndex = 3;
}
protectedvoidbtnsend\u单击(对象发送者,事件参数e)
{
//填充表单数据会话
_FormInfo=新字典();
_FormInfo.Add(“Name”,txtName.Text);
_FormInfo.Add(“Postcode”,txtPostcodeDone.Text);
邮政编码搜索器。邮政编码电邮器(_公司,_FormInfo);
mv.ActiveViewIndex=3;
}
下面是我想要调用的方法(在PostcodeSearcher类中)
publicstaticvoidpostcodemailer(上市公司,字典引用)
{
...
}
正如您所看到的,我需要在一个新线程中调用的方法需要接受参数——我可以在网上找到的只是调用一个没有参数的新线程。有什么想法吗?使用C的任务功能。这些对于执行异步命令非常有用(而且实现起来非常简单) 编辑:
Task postcodeTask = new Task(() => PostcodeSearcher.PostcodeEmailer(_Companies, _FormInfo));
postcodeTask.Start();
使用C#as find的任务功能。这些对于执行异步命令非常有用(而且实现起来非常简单) 编辑:
Task postcodeTask = new Task(() => PostcodeSearcher.PostcodeEmailer(_Companies, _FormInfo));
postcodeTask.Start();
请注意IIS终止ASP.NET应用程序进程的问题,如果没有对应用程序的活动用户请求,IIS可以这样做(延迟一段时间后,默认情况下为20分钟)。这意味着,您的后台线程可能在完成发送电子邮件的工作之前被杀死,而用户不会知道这一点 为了克服这个问题,您可以模拟用户请求,这样运行时就不会终止应用程序。其他选项(更好但更多的工作)是创建一个单独的进程(例如Windows“后台”服务),该进程将从ASP.NET应用程序(使用例如WCF服务)获取命令,并将电子邮件发送给用户。有关轻松创建Windows服务的信息,请参见
有关此问题的详细信息,请参见:注意IIS终止ASP.NET应用程序进程的问题,如果没有对应用程序的活动用户请求,IIS可以这样做(延迟一段时间后,默认情况下为20分钟)。这意味着,您的后台线程可能在完成发送电子邮件的工作之前被杀死,而用户不会知道这一点 为了克服这个问题,您可以模拟用户请求,这样运行时就不会终止应用程序。其他选项(更好但更多的工作)是创建一个单独的进程(例如Windows“后台”服务),该进程将从ASP.NET应用程序(使用例如WCF服务)获取命令,并将电子邮件发送给用户。有关轻松创建Windows服务的信息,请参见
查看有关此问题的详细信息:
Task.Factory.StartNew(()=>postcodesearch.postcodemailer(\u companys,\u FormInfo))代码>“你甚至不需要使用任务工厂来完成它。”-为什么不使用它?Task.factory.StartNew(()=>PostcodeSearcher.postcodemailer(_companys,_FormInfo))代码>“你甚至不需要使用任务工厂来完成它。”-为什么不使用它?C#5的Asnyc呢?C#5的Asnyc怎么样?我支持基于服务的方法。ASP.NET页面的设计根本不是为了处理批量或长时间运行的进程。我支持基于服务的方法。ASP.NET页面的设计并不是为了处理批量或长时间运行的进程。