当被调用的方法在引用的程序集中时,编译器警告CS4014(在不等待结果的情况下调用异步方法)不会作为警告发出。
当被调用的方法在同一程序集中时,将正确发出警告。
当两个项目包含在同一解决方案中时,在Visual Studio中会发出编译器警告。
造成这种差异的原因似乎是编译器仅具有编译的引用程序集,而Visual Studio具有两个程序集的源代码。
问题是:为什么这两种行为不同?并且有什么办法可以在编译期间发出CS4014警告?
要复制此行为,请设置两个类库,每个类库都有一个代码文件:
TestClassLibrary1
public class Class1
{
public static async Task<string> DoSomething()
{
return await Task.FromResult("test");
}
}
Run Code Online (Sandbox Code Playgroud)
TestClassLibrary2(引用TestClassLibrary1)
public class Class2
{
public void CallingDoSomething()
{
Class1.DoSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
这些项目的编译将完成,而不会发出警告。在Visual Studio中的同一解决方案中打开它们将导致在错误列表中显示1条错误,并在下方显示一条红色的波浪线Class1.DoSomething()。