Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET多线程_C#_Asp.net_Multithreading - Fatal编程技术网

C# 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

我有一个ASP.NET页面,它向用户列表发送电子邮件-这个列表可能相当大,我们发现ASP.NET页面经常会超时

我们要做的是在一个新线程中发送这些电子邮件,这样当电子邮件进程在后台工作时,ASP.NET页面将刷新给用户

不过,我很难弄清楚我需要做什么。以下是当前我的ASP.NET页面上的按钮单击事件:

    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页面的设计并不是为了处理批量或长时间运行的进程。