最も簡単な修正は
public override async SomeReturnTypeItem LoginAsync()
{
#if __MOBILE__
throw new NotSupportedException("Windows authentication is not supported in mobile version");
#else
//some code using await
#endif
}
だろう。しかし__MOBILE__
がある場合ので、それは、おそらくあなたが望む正確に動作しません。
それとも、あなたは単に警告を抑制するために#pragma
ディレクティブを使用することができますこのメソッドはすぐにスローするのではなく、エラーTask
を返します。あなたがすぐに待つのではなく、後で使用するためにTask
を保存すると(たとえば、いくつかのタスクを開始して同時に実行させたい場合など)、その差は非常に大きくなることがあります。
これを解決するには、別の方法で例外投げコードと非同期実装を置く必要があります。もちろん
public override SomeReturnTypeItem LoginAsync()
{
#if __MOBILE__
throw new NotSupportedException("Windows authentication is not supported in mobile version");
#else
return LoginAsyncImpl();
#endif
}
private async SomeReturnTypeItem LoginAsync()
{
//some code using await
}
、あなたがawait
を使用していない場合はすべてで、あなただけではないはず最初にasync
としてあなたのメソッドをマークしてください!
public override omeReturnTypeItem LoginAsync()
{
#if __MOBILE__
throw new NotSupportedException("Windows authentication is not supported in mobile version");
#else
//some code not using await
#endif
}
注非非同期コードはまだTask
を返すことができるという。これは、インプリメンテーションが本当に非同期になるようにいくつかのメソッドがタスクを返すようにするインターフェイスまたは基本クラスを実装する場合に便利ですが、具体的な実装は同期して行われます。
public override Task SomeMethodAsync()
{
// do some synchronous stuff
return Task.FromResutl(true);
}
何を期待しましたか? '* __MOBILE__'が設定されていると*のコードに到達できません - 例外とそれ以降のコードは実行されません。警告を出さない場合は、コードを削除するか、 '#else'ディレクティブを使用してください。 –
"メソッドが不足しています "という警告が表示される場合は、' async'キーワードを使用しないでください。それは両方のバージョンのためです。 –
"some code"に 'await'が含まれていると仮定しても安全ですか?'の#else ...#endif'を使用して: –