1

Azure ワーカー ロールからオンプレミスで CRM 2011 と対話する ASP.Net アプリケーションを構築しました。これで、シングル スレッド アプリケーションになりました。キュー内の他のプロセスも非同期で処理されるように、マルチスレッドを実装したいと考えています。どうするのが一番いいのか、どうすればできるのか教えてください。どんな参考文献も高く評価されます。

4

2 に答える 2

0

あなたが欲しいParallel.ForParallel.ForEach

于 2012-08-03T12:30:27.320 に答える
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 が接続を開いてアイテム 1 ~ 1000 を処理し、スレッド 2 が接続を開いてアイテム 10001 ~ 2000 を処理します。
  • すべてのマルチスレッド ルールが適用されます。すべての共有データには、マルチスレッド セーフであることを保証するためのセーフガードが必要です。
于 2012-08-03T12:32:44.857 に答える