Я создал приложение ASP.Net, которое взаимодействует с CRM 2011 на основе рабочей роли Azure. Теперь это однопоточное приложение. Я хочу реализовать многопоточность, чтобы другие процессы в очереди также обрабатывались асинхронно. Не могли бы вы подсказать, как это лучше сделать и как это сделать. Любые ссылки будут высоко оценены.
Многопоточность в рабочей роли Windows Azure
comment
Это .NET. Перейдите на msdn.microsoft.com и выполните поиск .NET Parallel.
- person paparazzo   schedule 03.08.2012
Ответы (2)
Я никогда не использовал рабочую роль 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