C#多线程CPU使用率100%

C#多线程CPU使用率100%,c#,asp.net,multithreading,cpu-usage,C#,Asp.net,Multithreading,Cpu Usage,我的应用程序是一个asp.net web服务。同一台服务器中还有一个windows服务正在崩溃,并按指定的时间间隔触发web服务 因此,在每个web服务调用中,在web服务器端,它创建一个新线程并开始执行web服务假定要执行的任务 有时,在下一个web服务调用到来之前,此启动线程无法完成分配的任务。因此,下一个web服务调用将创建一个相同类型的新线程,并将新任务分配给新线程 因此,如果我在繁忙的情况下检查服务器,有时会有20多个并行线程破坏 一切正常。但服务器(Windows2003SP2)有时

我的应用程序是一个asp.net web服务。同一台服务器中还有一个windows服务正在崩溃,并按指定的时间间隔触发web服务

因此,在每个web服务调用中,在web服务器端,它创建一个新线程并开始执行web服务假定要执行的任务

有时,在下一个web服务调用到来之前,此启动线程无法完成分配的任务。因此,下一个web服务调用将创建一个相同类型的新线程,并将新任务分配给新线程

因此,如果我在繁忙的情况下检查服务器,有时会有20多个并行线程破坏

一切正常。但服务器(Windows2003SP2)有时看起来没有响应。因此,我在任务管理器中检查CPU性能,它在web服务开始工作时显示100%。即使只有1,2个线程,同样的事情也会发生

我觉得有点不对劲。我做了一些概念上错误的事情。谢谢你的建议

编辑

public class EmailPrinter : System.Web.Services.WebService

  public void webServiceMethod()
  {
      Thread email_thread = new Thread(new ThreadStart(this.downloadEmails));
      email_thread.Start();
  }   

  private void downloadEmails(object sender, DoWorkEventArgs e)
  {
    EmailService.init(); 
    EmailService.ReceiveEmail();
  }

}

显然,如果前一个线程尚未完成执行,则不应该启动另一个线程。将线程执行推迟到第一个线程完成,或者推迟到下一个计划的开始,此时您将再次确保前一个线程已完成执行。你所发现的通常被称为“护航”。@LasseV.Karlsen:这不一定是“明显的”,这取决于线程在做什么。也就是说,很明显,正在使用的线程方法或(更有可能)正在运行的代码都存在问题。我认为我们需要查看代码来做出判断。我会首先确保服务只启动一个线程。这可以通过多种方式完成(添加一个私有布尔字段,_isWorking,使用锁…)。将开始和结束记录到windows事件日志。另外,在web服务中记录开始和结束。由于他提到他自己可以看到20多个线程,我认为很明显,他不能按照自己的方式来做。不知道在不了解这些web服务API的本质的情况下,如何在这里发表评论?他们的目的是什么?它们触发了什么过程?它们会触发什么后续IO?ETC20+web服务线程并不一定意味着100%的CPU利用率。。。是否有一个旋转等待某处扼杀CPU?太多的问题。。。不够详细