2011-01-25 4 views
1

В моем приложении я использую набор данных и 4 метода, как показано ниже.Как я могу выполнять разные методы одновременно?

Dataset ds=new Dataset(); 
ds=businesslogiclayerObject.method1(a,b,c,d); 
ds=businesslogiclayerObject.method2(a,b,c,d,e); 
ds=businesslogiclayerObject.method3(a,b,c,d,e,f); 
ds=businesslogiclayerObject.method4(a,b,c,d,e,f,g,h); 

(а, б, в, г, д, е, ж, з) являются параметрами для хранимой процедуры в BusinessLogic слоя. До сих пор я не реализовал ни одной концепции потоковой передачи, поэтому они выполняются один за другим. Это требует много времени, чтобы получить набор результатов в наборе данных.

Как я могу выполнить выше 4 методов одновременно?

Помогите мне.

С уважением, N.SRIRAM

+0

Используйте 4 пробела в начале строки с кодом на них применять форматирование. Это облегчит каждому возможность прочитать ваш вопрос. – Kendrick

ответ

0

Поскольку вы используете .NET 3, вы можете использовать BackgroundWorker, так как это позаботится о попытке маршалинга вернуться к потоку пользовательского интерфейса, а также к некоторым другим сложностям потоковой передачи. Однако он не будет заботиться о блокировке; поэтому не забудьте обратиться к аспекту блокировки, если это необходимо.

BackgroundWorker worker = new BackgroundWorker(); 
worker.DoWork += new DoWorkEventHandler(OnGrabData); 
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(OnGrabDataCompleted); 
worker.RunWorkerAsync(new DataClass(a,b,c,d,e,f,g)); 

DataClass может инкапсулировать ваши параметры, хранимая процедура будет доступ или, возможно, вы могли бы пройти delegate с параметрами, которые затем могут быть вызваны в BackgroundWorker. В любом случае в этом примере должно быть BackgroundWorker, чтобы обеспечить упрощенное поведение потоков.

0

, если ваш «businesslayer» выполняет какую-SQL и возвращает набор данных можно переписать, что для выполнения всех SQL-операторы с одной партии; разделять каждый индивидуальный вызов sql/sproc;

результирующий набор данных будет иметь данные для каждого отдельного sql.

0

Прежде всего, есть несколько вещей, чтобы думать о:

  1. методы фактически никогда не будет выполнять одновременно
  2. Общее время выполнения будет вероятно, будет больше, чем когда выполняются последовательно.
  3. Вы должны оценить, подходит ли заказ исполнения.

Если это не проблема (например, если вы просто хотите обработать вызовы в фоновом режиме), то есть несколько вариантов. Самый легкий, вероятно, использует threadpool, используя ThreadPool.QueueUserWorkItem() или используя BackgroundWorker.

В зависимости от ваших конкретных нужд, вы могли бы захватить необходимые параметры в виде списка или словаря, или определить отдельный объект состояния, и сделать что-то вроде:

Dictionary<string, object> parameters = new Dictionary<string, object> 
parameters.Add("a", 42); 
parameters.Add("b", new object()); 
parameters.Add("c", null); 
ThreadPool.QueueUserWorkItem((state) => { do stuff with "state" }, parameters);. 
Смежные вопросы