1

我已经构建了一个 ASP.Net 应用程序,它通过 Azure 辅助角色在本地与 CRM 2011 进行交互。现在它是一个单线程应用程序。我想实现多线程,以便队列中的其他进程也得到异步处理。您能否建议最好的方法是什么以及如何完成。任何参考将不胜感激。

4

2 回答 2

0

我从未使用过 Azure Worker Role,但从我的快速谷歌搜索来看,下面的代码没有理由不工作。我将它用于我的现场 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 等...
  • 所有多线程规则都适用,任何共享数据都需要有保护措施以确保它是多线程安全的。
于 2012-08-03T12:32:44.857 回答
0

你想要Parallel.ForParallel.ForEach

于 2012-08-03T12:30:27.320 回答