Windows天蓝色工人角色中的多线程

时间:2012-08-03 12:10:20

标签: .net c#-4.0 dynamics-crm-2011 azure-queues

我已经构建了一个ASP.Net应用程序,该应用程序在Azure工作者角色的基础上与CRM 2011进行交互。现在它是一个单线程应用程序。我想实现多线程,以便队列中的其他进程也异步处理。您能否建议一下这样做的最佳方式以及如何做到这一点。任何参考文献都将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

我从未使用Azure辅助角色,但是从我的快速谷歌搜索,没有理由下面的代码不起作用。我将其用于我的现场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等。
  • 所有多线程规则都适用,任何共享数据都需要有一个安全措施,以确保它的多线程安全。