ConfigureAwait的静态分析

时间:2015-02-12 20:12:02

标签: async-await static-analysis

我尝试实现静态分析,以检查方法及其调用图是否需要UI或Request(ASP.NET)上下文。答案将决定方法体中await语句中对ConfigureAwait的需求。

我的计划是使用Roslyn检查调用图中每个成员访问的符号,无论它们是从System.Windows.UIElement类派生的。这种方法有效吗?那么ASP.NET上下文呢?

2 个答案:

答案 0 :(得分:4)

这种静态分析很难正确实施。您可以使用启发式方法(例如UIElement),但您可能最终会出现一些误报和/或漏报。

例如,FlowDocument并非来自UIElement。您可以更改您的启发式以测试DispatcherObject - 派生类型,但之后还包括Freezable,它可能需要或可能不需要上下文 - 您无法在编译时知道。因此,在一般情况下保证误报(或否定)。

作为另一个示例,将项目添加到作为数据绑定属性公开的集合中也需要上下文,即使该集合不是UI元素。

ASP.NET中存在类似的问题。 HttpContext.Current很明显,但是隐式使用当前文化的字符串格式化方法呢?有很多"陷阱"在ASP.NET方面也是如此。

那就是说,我认为这是一个好主意;只要确保有一个简单的方法来忽略误报和漏报。

答案 1 :(得分:1)

我认为比较字符串的出现次数' await'和字符串' ConfigureAwait'在同一个文件中。

这可能是天真的,但却是第一道防线。