方法NDepend的出现次数

时间:2017-10-13 09:10:28

标签: c# asynchronous ndepend cqlinq

我需要编写一个NDepend规则来检查异步方法的每个等待是否都使用ConfigureAwait(false)。

我检查方法是否使用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
}

如果您确定每个异步方法都使用一个等待,则此代码可以正常工作。 但是如果一种方法使用两个等待怎么办?那么你可以用该方法计算所有出现的等待时间。

示例

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违反了规则。

使用我的代码,我可以看到Foo违反了规则,但Stone没有违反它。

使用'MethodsCalled',我可以检查方法是否使用ConfigureAwait(),这很好。但同样,我无法检查await和ConfigureAwait()'Stone'的出现次数。

0 个答案:

没有答案