C#多线程

Sta*_*ker 4 c# multithreading

让我说我有一个事件,每个秒被解雇10次

void Session_OnEvent(object sender, CustomEventArgs e)
{
  //DoStuff

  DoLongOperation(e);
}
Run Code Online (Sandbox Code Playgroud)

我想要方法DoLongOperation(e); 每次事件被触发时在一个单独的线程上处理,

我可以这样做:

new Thread(DoLongOperation).Start(e);
Run Code Online (Sandbox Code Playgroud)

但我觉得这对性能不好,我想达到最佳性能,那么我能做的最好的事情是什么?

谢谢你...

编辑:当我说多长时间我并不意味着一个操作最多需要超过1秒它只是我不希望事件等待那个时间所以我想在分开的线程中做出...

Jon*_*Jon 6

您问题的直接答案是:使用托管线程池来利用ThreadPool.QueueUserWorkItem您的操作.(您可能想看看问题的答案" 我何时使用线程池与我自己的线程? ").

但是,从更大的角度来看:如果你开始的所有操作都需要超过100毫秒才能完成,那么你在数学上会产生比你能处理的更多的工作.无论你如何分割,这都不会结束.例如,如果每次创建一个单独的线程,那么你的进程将耗尽线程,如果你使用线程池,那么你将使用它永远无法完成的工作来淹没它,等等.

如果只有一些操作最终会很长,并且最终会立即完成,那么您可能有机会找到切实可行的解决方案.否则,您需要重新考虑您的程序设计.