【问题标题】:Inner thread is not working in ASP.Net内线程在 ASP.Net 中不起作用
【发布时间】:2015-11-24 10:18:52
【问题描述】:
Thread nwthread = new Thread(() =>
{
    try
    {
        string srch = "http://www.thesaurus.com/browse/" + keyword;
        using (WebClient  webpage = new WebClient())
        {
           // webpage.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
            webpage.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
          Session["dwnld"]=  downloadedString = webpage.DownloadString(srch);
        }

        //downloadedString = client.DownloadString(srch);
    }
    catch (WebException w)
    {
        //Response.Write("<script>alert('Invalid Operation..!')</script>");
        string fpath2 = Server.MapPath(@"~/Ex_Contents/" + _file[0] + "/");
        if (File.Exists(fpath2))
        {
            string[] exfiles1 = Directory.GetFiles(fpath2);
            foreach (string file1 in exfiles1)
            {
                File.Delete(file1);
            }
            return;
        }
    }
});

nwthread.Start();

上面提到的代码在.aspx页面的主UI线程中。但是如果不设置断点它就无法工作。我已经把web内容提取放在线程中,因为它花费了太多时间。所以会话变量也不是获得任何价值。

请给出解决方案

【问题讨论】:

  • ASPX 页面中的 UI 线程? :)

标签: c# asp.net multithreading


【解决方案1】:

ASP.NET 应用程序是一个处理请求的应用程序。 UI由浏览器绘制。因此,ASP.NET 应用程序中没有 UI 线程。

IIS 从线程池中为每个处理请求提供一个单独的线程。这意味着在 ASP.NET 中,您可以执行任何代码,而不必担心它会消耗多少资源。

只需删除您的 Thread 用法并在当前线程中执行相同的代码 :)

【讨论】:

  • 其实我的意思是固有线程。如果我不把它放在线程中,那么它需要时间来获得响应。最后出现网络异常。
【解决方案2】:

好吧,既然你不再在请求线程上,你就不能再访问请求资源了!

这包括您对SessionServer 的使用——两者都与您当前的请求上下文相关联。当您设置断点时,发生的最重要的事情是请求线程在您单步执行“工作线程”代码时被冻结 - 因此请求上下文的生存时间比您的帮助线程长。一旦请求线程完成,请求就结束,并且响应已经发送——无法改变这一点。 HTTP是一个非常简单的request->response模型,没有地方“哦,等等,有一条信息我上次忘记发了”。

我认为您在这里采取了完全错误的方法。没有理由你必须在一个请求中完成所有事情——这就是 AJAX 和 IFrame 之类的东西。这是一个单独的异步请求 - 为什么不将其设为单独的请求?

【讨论】:

  • 非常感谢您...当我在 Async 方法中定义 Web 内容提取逻辑并在调用方方法中等待时,该问题已得到解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多