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

我的计划是使用Roslyn来检查调用图中每个成员访问的符号是否它们是从System.Windows.UIElement类派生的。这种方法行得通吗?对于ASP.NET上下文呢?

最佳答案

这种静态分析很难正确实施。您可以使用试探法(例如UIElement),但最终可能会得到一些误报和/或误报。

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

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

ASP.NET中也存在类似的问题。 HttpContext.Current很明显,但是隐式使用当前区域性的字符串格式化方法又如何呢?在ASP.NET方面也有许多“陷阱”。

话虽如此,我认为这是个好主意。只要确保有一种简单的方法就可以忽略误报和误报。

关于async-await - ConfigureAwait的静态分析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28486869/

10-17 00:11