Многопоточность в рабочей роли Windows Azure

Я создал приложение ASP.Net, которое взаимодействует с CRM 2011 на основе рабочей роли Azure. Теперь это однопоточное приложение. Я хочу реализовать многопоточность, чтобы другие процессы в очереди также обрабатывались асинхронно. Не могли бы вы подсказать, как это лучше сделать и как это сделать. Любые ссылки будут высоко оценены.


person rubyist    schedule 03.08.2012    source источник
comment
Это .NET. Перейдите на msdn.microsoft.com и выполните поиск .NET Parallel.   -  person paparazzo    schedule 03.08.2012


Ответы (2)


Вам нужен Parallel.For или Parallel.ForEach.

person Josh Painter    schedule 03.08.2012

Я никогда не использовал рабочую роль Azure, но из моего быстрого поиска в Google нет причин, по которым приведенный ниже код не должен работать. Я использую это для пакетных процессов для моей локальной CRM.

var options = new ParallelOptions();
// For single Thread debugging, set MaxDegreeOfParallelism to 1:
options.MaxDegreeOfParallelism = 10; // Make this value configurable you can slow down CRM if you try to pump too many things through it.
var actions = GetListOfWorkItems().Select(workItem => (Action)(() => ProcessWorkItem(workItem)));
Parallel.Invoke(options, actions.ToArray());

private void ProcessWorkItem(WorkItem workItem){
    // Code to run in parallel goes here
}

Всего несколько заметок

  • Организация IOrganization не является многопоточной, поэтому создайте ее для каждого потока, который в ней нуждается.
  • Если вы обрабатываете тысячи записей, обычно более эффективно группировать записи, поэтому поток 1 открывает соединение и обрабатывает элементы 1-1000, поток 2 открывает соединение и обрабатывает элементы 10001-2000 и т. д.
  • Применяются все правила многопоточности, любые общие данные должны иметь защиту, обеспечивающую их многопоточную безопасность.
person Daryl    schedule 03.08.2012