メッセージを非同期に実行するために ExecuteAsync を使用します

ここに説明したいくつかの操作を除き、SDK アセンブリ要求クラスを使用した全てのデータ操作は同期します。

ソリューションのインポートは大量のリソースを必要とする操作の 1 つです。そのため ExecuteAsyncRequest 要求クラスを使用して、この操作を非同期的に実行するオプションが存在します。 DeleteAndPromoteRequest 要求クラスでは同様のリソース集約的な操作を実行します。

ソリューションを非同期にインポートすることで、サーバーの負荷が少なくなる時点までメッセージの実行を延期し、システムのパフォーマンスを改善します。 対話型ユーザーは、対象メッセージの実行を、続行可能になるまで待つ必要はありません。 これはソリューションのインポートを実行するのに数分以上かかる場合に特に有効です。

多数の関連活動または他のテーブル タイプと行をマージすると、関連するすべての行を更新するのに長い時間がかかる可能性があるため、これらをバックグラウンドで実行するとユーザー エクスペリエンスが向上します。

注意

ImportSolutionRequestDeleteAndPromoteRequest、および MergeRequestExecuteAsyncRequest で使用できる唯一の要求クラスです。

ExecuteAsyncRequest 要求クラスは、メッセージを非同期的に実行する場合に使用します。 要求を構成して、引数として要求インスタンスを IOrganizationService/Execute へ渡します。 ExecuteAsyncResponse は、非同期ジョブの ID を返します。 (オプション) ID を使用してジョブをクエリし、現在の状態を確認できます。

ExecuteMultipleRequest 要求クラスを使って、非同期にインポートされる複数のソリューションをキューに入れることができます。 これを行うには、1 つ以上の ExecuteAsync メッセージ要求を ExecuteMultiple メッセージ要求に追加します。 システム全体のパフォーマンスを向上させる調整制限により、非同期に実行する 1 つのメッセージのみを、組織ごとに 1 度に実行できます。

ExecuteMultiple メッセージに関する詳細は、.NET 用 SDK を使用して複数の要求を実行する を参照してください。

次の例では ImportSolutionRequest メッセージ要求クラスと共に、 ExecuteAsyncRequest メッセージ要求クラスを使用する方法を示します。

string ManagedSolutionLocation = @"C:\temp\ManagedSolutionForImportExample.zip";

byte[] fileBytes = File.ReadAllBytes(ManagedSolutionLocation);

ImportSolutionRequest impSolReq = new ImportSolutionRequest()
{
CustomizationFile = fileBytes
};

ExecuteAsyncRequest asyncReq = new ExecuteAsyncRequest()
{
Request = impSolReq
};

var asyncResp = (ExecuteAsyncResponse)svc.Execute(asyncReq);

Guid asyncOperationId = asyncResp.AsyncJobId;

AsyncOperation テーブルを AsyncOperationId と一致するシステム ジョブの asyncOperationId の値を用いてポーリングします。これは操作が成功 (30) 、失敗 (31) またはキャンセル (32) されたことを示す StatusCode の値を検出するためです。

関連情報

.NET 用 SDK でメッセージを使用する
ExecuteTransaction を使用する
.NET 用 SDK を使用して複数の要求を実行する

注意

ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)

この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。