##awaitしないasyncメソッドの警告
Unity2017になって、C#6.0が試験的とはいえ使用できるようになりました。
C#6.0といえば非同期処理としてasync, await記法が使えるバージョンですね!
さて、asyncを利用しているとよく見かけることになる警告があります。
warning CS1998: Async block lacks `await' operator and will run synchronously
これは以下のようなコードで再現します。
public async Task NoAwait()
{
Debug.Log("do something without await...");
}
##警告の対処法
ようは、関数にasync
をつけているのに何もawait
しないで終了するよ!という警告です。
この警告はうざったい!ということで、ググるとこいつを消す方法がいろいろ出てきます。
一例はこちら
#pragma warning disable 1998
public async Task NoAwait()
{
Debug.Log("do something without await...");
}
#pragma warning restore 1998
はい、警告は出なくなりました。でもこれでは該当する箇所に全部書かないといけません。面倒ですね。
では、プロジェクト設定で無視するようにしましょう。
Visual Studioのプロジェクト設定、ビルドの項目にエラーおよび警告という設定項目があります。
表示しない警告に1998を設定しましょう。
これで警告が無視できるようになるのであればこれで問題ありません。
ただ、Unityと連携しているとそもそもプロジェクト設定が開けなくなっていたりします。
##mcs.rspについて
mcs.rsp
というファイルがあります。これは古いバージョンではsmcs.rsp
という名前でした。
UnityプロジェクトのAssets
直下に配置することで、defineシンボルの定義を設定することができます。
defineシンボルを定義する使い方はこちらを参照してください。
ここでは警告を無視する使い方を紹介します。
-nowarn:1998
これだけ書いたmcs.rsp
ファイルをAssets
直下に配置するだけで、表題の警告は出なくなります。
##余談
smcs
の実体はUnityをインストールしたディレクトリに存在していて、windowsならUnity/Editor/Data/Mono/lib/mono/unity/smcs.exe
にあります。
smcs.exe -help
を実行するとその他のオプションも全て出てきます。