2

非同期メソッドのすべての await が ConfigureAwait(false) を使用しているかどうかをチェックする NDepend ルールを作成する必要があります。

メソッドが ConfigureAwait(Boolean) を使用しているかどうかを確認します。そのメソッドがそれを使用しない場合、ルールに違反しています。

from m in JustMyCode.Methods 
where
!(m.IsUsingMethod("System.Threading.Tasks.Task.ConfigureAwait(Boolean)") ||
m.IsUsingMethod("System.Threading.Tasks.Task<TResult>.ConfigureAwait(Boolean)")) && 
m.IsAsync

select new { 
 m,
 m.MethodsCalled
}

すべての async メソッドが 1 つの await を使用していることが確実な場合、このコードは正常に機能します。しかし、メソッドが 2 つの await を使用する場合はどうなるでしょうか? 次に、そのメソッドで await のすべての発生をカウントできます。

public async Task Foo()
{
  await DoSomething();
}

public async Task Bar()
{
  await DoSomething().ConfigureAwait(false);
}

public async Task Stone()
{
  await DoSomething();
  await DoSomething().ConfigureAwait(false);
}

フーとストーンはルールを破った。

私のコードでは、Foo がルールに違反していることがわかりますが、Stone はルールに違反していません。

「MethodsCalled」を使用すると、メソッドが ConfigureAwait() を使用しているかどうかを確認できます。これは便利です。しかし、繰り返しますが、await と ConfigureAwait() 'Stone' の発生回数を確認できません。

4

0 に答える 0