非同期メソッドのすべての 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' の発生回数を確認できません。