に `await`を忘れません警告:私は考えてみましょうインタフェースメソッド呼び出し
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
C c = new C();
c.FooAsync(); // warning CS4014: Because this call is not awaited, execution of the current method continues before the call is completed. Consider applying the 'await' operator to the result of the call.
((I)c).FooAsync(); // No warning
}
}
class C : I
{
public async Task FooAsync()
{
}
}
interface I
{
Task FooAsync();
}
私はc
オブジェクトに直接非同期メソッドを呼び出す場合は、私は、コンパイラの警告が表示されます。ここにはバグが潜んでいる可能性があるので、私は警告がうれしいです。
しかし、インターフェイスメソッドで同じ呼び出しを行うと、警告は表示されません。このコードでバグを未解決にするのは簡単でしょう。
このような間違いをしないようにするにはどうすればよいですか?私自身を守るために適用できるパターンはありますか?
良い質問...インターフェイスメソッドasyncをマークすることができないので、この場合はコンパイラから警告が出るとは思われません。たぶん、誰かがR#がそうしているかどうかを知っているかもしれません(またはプラグインがあります)。 –
ReSharperはそれをキャッチしません。 – cadrell0
ビルドプロセス中に[NDepend](http://www.ndepend.com/)がカスタム "CQL"クエリを実行するとそれが見つかる可能性がありますが、 'async'はコンパイラのトリックなので実際にはコンパイルされませんIL、私はそれを疑う。 –