2
我有一个Roslyn分析器,我最近更新使用CSharp.Workspaces的2.3版本。我发现,当我建立时,我得到如下警告:Roslyn Analyzer应该如何处理异步代码?
分析器试图注册'异步'操作,这是不支持的。
我添加的一些操作是异步的,因为它们从Roslyn API调用异步方法,如下面的假设示例所示。
public override void Initialize(AnalysisContext context)
{
context.RegisterSymbolAction(AnalyzeProperty, SymbolKind.Property);
}
private async void AnalyzeProperty(SymbolAnalysisContext context)
{
var property = (IPropertySymbol) context.Symbol;
foreach (var syntaxRef in property.DeclaringSyntaxReferences)
{
DoSomethingWith(await syntaxRef.GetSyntaxAsync());
}
}
我应该改变await
任何用来.Result
或.Wait()
的任务,或者是有我应该纠正响应警告我的代码一些其他的方式?
这是否意味着我还应该使用同步API编写分析器操作的任何帮助器方法,而不是只编写它们的异步调用.Result或Wait()结尾? –
@RikkiGibson作为一个分析器,你正在一个线程池线程上运行,并且没有任何UI操作正在等待你,所以只需执行'GetAwaiter()。GetResult()'就可以了。没有必要编写帮助器方法。 –