FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

C# SDK(コミュニティSDK)での同期メソッドの廃止について

f:id:mbaasdevrel:20200710131602p:plain

こちらは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が不要に

これまで FetchFetchAsync といった具合にメソッド名が分かれていましたが、非同期のみとなったので Fetch のようになりました。これに伴うメソッド名変更は次の通りです。

旧名称 新名称
FetchAsync Fetch
FetchAllAsync FetchAll
SaveAsync Save
DeleteAsync Delete
FetchUserAsync FetchUser
FetchRoleAsync FetchRole
LoginAsync Login
SignUpAsync SignUp

まとめ

同期処理はコードが直列処理になるので分かりやすい一方、ネットワーク処理中はスレッドが固まってしまう欠点があります。非同期処理の場合はそういった欠点がありません。スマートフォンアプリの場合は特に非同期処理の活用が基本になります。

公式SDKであるUnity SDKでも一部メソッドにおいて非同期処理が用意されています。Unity SDKでasync/awaitが使えるメソッドについてをご覧ください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。