こちらはUnity SDKではなく、コミュニティSDKのC# SDKに関する記事になります
C#で作られているSDKとしてはUnity SDKがありますが、Unity以外の環境では利用できません。そこで有償のテクニカルサポートは提供していませんが、コミュニティSDKとしてC# SDKを開発中です。こちらは純粋なC#で作られており、Xamarinや.NETアプリケーション開発に利用できます。
これまでネットワーク処理の同期と非同期を両方提供していましたが、バージョン0.10.0より非同期のみの提供となります。
同期処理廃止の原因
これまでネットワーク処理はWebClientを使ってきました。このライブラリはネットワーク処理を手軽に扱える一方、機能は多くありません。
ファイルストアを扱うのにあたり、 multipart/form-data を利用する必要が出ましたが、WebClientではファイルアップロードの要件が満たせませんでした。そこで HttpClient に移行しました。こちらは多少行数が増える一方、より高度なネットワーク利用が可能です。
このHttpClientへ乗り換えたタイミングで、すべて非同期処理のみ対応としました。
今後の書き方
ネットワーク処理が非同期になると async/awaitが活躍します。たとえばデータストアへの保存は次のように書けます。
関数名においてasyncを定義しておく必要があります。
public async Task<void> Hoge() { }
後は非同期処理の発生するメソッドの前に await を書きます。
var message = "Hello, world"; var item = new NCMBObject("DataStoreTest"); item.Set("message", message); await item.Save(); // 下の行はawaitが終わるまでは実行されません
これで非同期処理も同期処理のように書けます。
メソッド名にAsyncが不要に
これまで Fetch
と FetchAsync
といった具合にメソッド名が分かれていましたが、非同期のみとなったので Fetch
のようになりました。これに伴うメソッド名変更は次の通りです。
旧名称 | 新名称 |
---|---|
FetchAsync | Fetch |
FetchAllAsync | FetchAll |
SaveAsync | Save |
DeleteAsync | Delete |
FetchUserAsync | FetchUser |
FetchRoleAsync | FetchRole |
LoginAsync | Login |
SignUpAsync | SignUp |
まとめ
同期処理はコードが直列処理になるので分かりやすい一方、ネットワーク処理中はスレッドが固まってしまう欠点があります。非同期処理の場合はそういった欠点がありません。スマートフォンアプリの場合は特に非同期処理の活用が基本になります。
公式SDKであるUnity SDKでも一部メソッドにおいて非同期処理が用意されています。Unity SDKでasync/awaitが使えるメソッドについてをご覧ください。