同时调用或调用多个方法?

Abh*_*jan 7 c# asp.net

如何在asp.net的页面加载中同时调用多个方法?我有4个方法在我的页面加载事件中调用.但我想调用所有4种方法,而不是等待第一种方法完成然后调用第二种方法.

如何实现这一点是在asp.net 4.0?

Mar*_*ell 14

首先,重要的是要知道你在做什么是明智的.如果它们都受CPU约束,那么要这样做,IMO; Web服务器已经高度线程化,通常是一个繁忙的开始.有可能通过使用多个核心来降低整体速度.不过,对于1个用户来说,它看起来很棒!

如果你受IO限制,那么有很多方法可以做到这一点; 首选的是使用内置异步方法,无论你正在谈论什么,所以你可以使用IOCP而不是常规线程.所以对于a NetworkStream,你会使用BeginRead(...)等.

然后你需要把所有东西加在一起.还有很多方法; 我个人倾向于使用Monitor.WaitMonitor.Pulse,因为这避免了将非托管代码(很多等待句柄实际上是操作系统提供的).

另请注意:线程/并行性与许多有趣的失败方法捆绑在一起; 通常你只需要担心静态方法/数据的同步,但如果你在一个请求中有多个线程做事:注意颠簸...有很多.

.NET的下一个版本旨在使继续变得更容易; 我需要看看我们可以轻松地将当前的实验代码应用于IOCP场景.

  • 尼斯马克,这绝对是回答这样一个问题的方法,因为它提供了更多的指导,而不仅仅是回答这个问题. (3认同)

Ars*_*yan 9

Task[] tasks = new Task[]
{
   new Task(Method0),
   new Task(Method1),
   new Task(Method2),
   new Task(Method3)
}

foreach(var task in tasks)
   task.Start();
Run Code Online (Sandbox Code Playgroud)

或者更快

new Task(Method0).Start();
new Task(Method1).Start();
new Task(Method2).Start();
new Task(Method3).Start();
Run Code Online (Sandbox Code Playgroud)

  • 另外,`new [] {new Task(Method0),...,new Task(MethodN)}`应该可行 (2认同)