2016-10-17 2 views
1

Я работаю над обработкой на основе тяжелой нити, и каждая задача запускается только через 10 секунд. Я стремился повысить производительность, поэтому вам нужно некоторое предложение, как улучшить код ниже.Обработка параллельных потоков в C#

public void StartAllListerner() 
{ 
    foreach (tblUserMaster item in tblUserMasterBL.Instance.GetMany(new dbEntities())) 
     { 
      StartListenerProcess(item.ShoretelUserId, item.UserDN); 
     }  
} 

public void StartListenerProcess() 
{ 
    Task.Run(() => 
    { 
     TrackIncomingRequest(); 
    }); 
} 

public void TrackIncomingRequest() 
{ 
    do 
    { 
     if(current thread gets event) 
     { 
      foreach(var item in allEvents) 
      { 
       // Some unending heavy activity, which is running continuously in background 
      } 
     } 
    } while (true); 
} 

Основываясь на текущей кодовой базе, обработка происходит только тогда, когда поток получает какое-то событие, иначе его просто постоянно ждет события.

Итак, как мы можем запускать параллельную задачу в C#?

+4

Зачем вам нужно распараллелить _creation_ задач? Если вы используете разделитель, используемый 'Parallel.ForEach', использование его напрямую будет немного яснее. – Haukinger

+3

Я бы предложил задать этот вопрос в обмене стека кода: http://codereview.stackexchange.com/, где вы можете спросить людей, как лучше всего оптимизировать ваш код :) –

+1

Почему вы используете 'Task.Run' в 'StartListenerProcess'? 'Parallel.ForEach' уже дал ему поток. Вам действительно нужна новая «Задача»? – smoksnes

ответ

0

попробовать что-то вроде этого:

public void TrackIncomingRequest() 
{ 
    do 
    { 
     if(current thread gets event) 
     { 
      Parallel.Foreach(allEvents, (item) => 
      { 
       // Some unending heavy activity, which is running continuously in background 
      }); 
     } 
    } while (true); 
} 
Смежные вопросы