ドキュメント

​
​

Development

User Acquisition

Monetization

産業

Cloud Code

Open Unity Dashboard

Cloud Code

LiveOps
​
​
Cloud Code
  • Overview
  • Get started
  • Server authority
  • Cloud Code C# modules
    • Overview
    • Get started
    • Concepts
    • Tutorials
      • Run modules
      • Write modules
      • Development essentials
        • Write unit tests
        • Dependency injection
        • Custom serialization
        • Batch requests
        • In-memory cache
      • Automate deployment
      • Integrate services
      • Advanced configuration
      • Use Cases
    • Reference
  • Cloud Code JavaScript scripts
  • Logging
  • Use-case samples
  • Privacy and consent
  1. Cloud Code

リクエストのバッチ処理

Batch your requests to execute UGS service calls in parallel for efficiency.
読み終わるまでの所要時間 5 分
最終更新 9ヶ月前

UGS サービスを呼び出すとリクエストをバッチ処理し、並行して実行できます。
Task.WhenAll
メソッドを使用すると UGS サービスを並行して呼び出すことができます。このメソッドは、引数リストのすべてのタスクが完了したときに、
Task
を返します。
注
ノート: 失敗したリクエストすべてがログに記録されます。これらは、Unity Dashboard の Cloud Code ログで確認できます。ロギングの詳細については、ロギング を参照してください。
注
ノート: 一部のリクエストが失敗した場合、成功したリクエストはロールバックされません。

呼び出して結果を返す

以下のサンプルを使用し、サービスを呼び出して、リクエストの結果を返すことができます。
以下のサンプルは、Leaderboards サービスと Economy サービスへの呼び出しを行います。リーダーボードまたは通貨をプロジェクトで設定していない場合、これらの呼び出しは失敗します。これを使用して、Cloud Code モジュールでのエラー処理をテストできます。
このメソッドから返されるのは、リクエストの結果とメソッドのシグネチャを含むディクショナリです (リクエストがキー、リクエストの結果が値です)。リクエストが失敗した場合、これによって、失敗したリクエストが示されます。これらの失敗もログに記録されます。
using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;using Unity.Services.CloudCode.Apis;using Unity.Services.CloudCode.Core;using Unity.Services.CloudSave.Model;using Unity.Services.Economy.Model;namespace BatchingRequests;public class BatchingRequests{ private const string ExperienceKey = "experience"; private const string ProgressXpKey = "progressXP"; private const string FailedMessage = "Failed. Check logs."; private readonly ILogger<BatchingRequests> _logger; public BatchingRequests(ILogger<BatchingRequests> logger) { _logger = logger; } [CloudCodeFunction("HandleMultipleRequests")] public async Task<Dictionary<string, object>> HandleMultipleRequests(IGameApiClient gameApiClient, IExecutionContext ctx) { async Task<object> GetCloudSaveData() { var res = await gameApiClient.CloudSaveData.GetItemsAsync(ctx, ctx.AccessToken, ctx.ProjectId, ctx.PlayerId, new List<string> { ExperienceKey, ProgressXpKey }); return res.Data; } async Task<object> SetCloudSaveData() { var res = await gameApiClient.CloudSaveData.SetItemAsync(ctx, ctx.AccessToken, ctx.ProjectId, ctx.PlayerId, new SetItemBody(ExperienceKey, 1)); return res.Data; } async Task<object> GetLeaderboardScore() { const string leaderboardId = "leaderboard"; var res = await gameApiClient.Leaderboards.GetLeaderboardPlayerScoreAsync(ctx, ctx.AccessToken, Guid.Parse(ctx.ProjectId), leaderboardId, ctx.PlayerId); return res.Data; } async Task<object> GetEconomyConfig() { var res = await gameApiClient.EconomyConfiguration.GetPlayerConfigurationAsync(ctx, ctx.AccessToken, ctx.ProjectId, ctx.PlayerId); return res.Data; } async Task<object> SetEconomyConfig() { const string currencyId = "NOT_REAL"; var res = await gameApiClient.EconomyCurrencies.IncrementPlayerCurrencyBalanceAsync(ctx, ctx.AccessToken, ctx.ProjectId, ctx.PlayerId, currencyId, new CurrencyModifyBalanceRequest(currencyId, 1)); return res.Data; } // Create a list of UGS tasks that return data var tasksWithObjects = new List<Func<Task<object>>>() { GetCloudSaveData, GetLeaderboardScore, SetCloudSaveData, GetEconomyConfig, SetEconomyConfig }; var results = await AwaitBatch(tasksFns); foreach (var item in results) { if (item is Exception) { _logger.LogError($"AwaitBatch failed status {item}"); } else if (item is CurrencyBalanceResponse) { _logger.LogInformation($"AwaitBatch CurrencyBalanceResponse status {item.GetType()} = {item}"); } else { _logger.LogInformation($"AwaitBatch success status {item.GetType()} = {item}"); } } // Alternatively to looping through all results, you may access function results directly // The order of function results follows the order of the function input e.g. // - GetCloudSaveData corresponds to results[0]: GetItemsResponse || Exception // - GetLeaderboardScore corresponds to results[1]: LeaderboardEntryWithUpdatedTime || Exception // ... etc // This can also help ascertain where the Exception originated from } private async Task<object[]> AwaitBatch(List<Func<Task<object>>> tasks) { var tasksToRun = tasks.Select(Run); var results = await Task.WhenAll(tasksToRun); return results; } async Task<object> Run(Func<Task<object>> fn) { try { return await fn(); } catch (Exception e) { return e; } }}public class ModuleConfig : ICloudCodeSetup{ public void Setup(ICloudCodeConfig config) { config.Dependencies.AddSingleton(GameApiClient.Create()); }}

Copyright © 2026 Unity Technologies
法規事項プライバシーポリシークッキーDocumentation Terms of Use私の個人情報を販売または共有しないプライバシーに関する選択 (クッキー設定)

"Unity" の名称、Unity のロゴ、およびその他の Unity の商標は、米国およびその他の国における Unity Technologies またはその関係会社の商標または登録商標です (詳しくはこちら)。その他の名称またはブランドは該当する所有者の商標です。

一部のページは利便性向上のため機械翻訳を使用しており、内容に不正確な表現が含まれる場合があります。内容に齟齬または不一致が生じた場合は、英語版を正本とします。

  • このページ
    • 呼び出して結果を返す


このページの問題を報告する