如何在我的頁面加載在asp.net中同時調用多個方法? 我有4種方法在我的頁面加載事件中調用。 但我想調用所有4個方法,而不是等待第1個方法完成,然後調用第2個方法。同時調用或調用多個方法?
如何在asp.net 4.0中實現這個功能?
如何在我的頁面加載在asp.net中同時調用多個方法? 我有4種方法在我的頁面加載事件中調用。 但我想調用所有4個方法,而不是等待第1個方法完成,然後調用第2個方法。同時調用或調用多個方法?
如何在asp.net 4.0中實現這個功能?
Task[] tasks = new Task[]
{
new Task(Method0),
new Task(Method1),
new Task(Method2),
new Task(Method3)
}
foreach(var task in tasks)
task.Start();
或者更短期
new Task(Method0).Start();
new Task(Method1).Start();
new Task(Method2).Start();
new Task(Method3).Start();
上的選擇也很差,'new [] {new Task(Method0),...,new Task(MethodN)}'應該可以工作 – 2011-03-14 12:18:04
Thanks @Marc,Edited! – 2011-03-14 13:29:36
你想要做的是做異步方法調用。
如果你讓你的方法異步它會工作。
(基本短線):
method1(onReadyCallback1);
method2(onReadyCallback2);
private void onReadyCallback1() {
}
等
從MSDN文檔看看該ThreadPool.QueueUserWorkItem然後here爲例
using System;
using System.Threading;
public class Example {
public static void Main() {
// Queue the task.
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
Console.WriteLine("Main thread does some work, then sleeps.");
// If you comment out the Sleep, the main thread exits before
// the thread pool task runs. The thread pool uses background
// threads, which do not keep the application running. (This
// is a simple example of a race condition.)
Thread.Sleep(1000);
Console.WriteLine("Main thread exits.");
}
// This thread procedure performs the task.
static void ThreadProc(Object stateInfo) {
// No state object was passed to QueueUserWorkItem, so
// stateInfo is null.
Console.WriteLine("Hello from the thread pool.");
}
}
首先關閉,重要的是要知道你在做什麼是敏感的IBLE。如果它們都是CPU綁定的,那麼不要做到這一點,IMO;一個Web服務器已經高度線程化,並且通常是一個繁忙的地方。使用多個內核會降低整體速度的可能性很高。不過,它對於1位用戶來說看起來很棒!
如果你是IO綁定,那麼有任何數字的方法來做到這一點;首選的是使用內置的異步方法來處理任何你正在談論的內容,所以你可以使用IOCP而不是普通的線程。因此,對於NetworkStream
,您將使用BeginRead(...)
等。
然後,您需要將所有內容連接在一起。有更多的方法;我個人傾向於使用Monitor.Wait
和Monitor.Pulse
,因爲這避免了非託管代碼(許多等待句柄實際上是由操作系統提供的)。
另請注意:線程/並行性與許多有趣的失敗方式捆綁在一起,通常你只需要過度擔心靜態方法/數據進行同步,但如果你有多個線程在單個請求服務處理:注意顛簸......有很多。
.NET的下一個版本旨在使延續更容易;我需要看看我們能夠輕鬆地將當前的實驗代碼應用於IOCP場景。
尼斯馬克,這絕對是回答這個問題的方法,因爲它提供了更多的指導,而不僅僅是回答問題。 – 2011-03-14 12:14:41
「Web服務器已經高度線程化」 - 這一行使我避免了多次調用我的應用程序。謝謝!! – xameeramir 2015-06-05 16:16:45
使用多線程 – 2011-03-14 12:07:20
嗨Abhishek,你不能一次調用所有4種方法,必須至少有一秒的延遲。如果你仍然想調用4種方法,那麼因爲Davide Piras告訴你使用多線程,並且需要藉助「BackgroundWorker」類來返回值,所以需要等到並且除非所有4個方法都執行。 – SharpUrBrain 2011-03-14 13:01:03
@SharpUrBrain - 什麼「一秒」處理任何事情?並且IMO BackgroundWorker在網絡層 – 2011-03-14 18:56:23