我在开发UWP应用程序的Visual Studio中收到CS4014警告,但不知道如何处理它们。我知道在VS中有一种抑制它们的方法,但是我不想完全抑制所有CS4014警告。
警告CS4014由于未等待此调用,因此将执行 当前方法在调用完成之前会继续。考虑 将'await'运算符应用于调用结果。
我认为麻烦的原因是它显示在* .g.cs文件中,这些文件是由VS自动生成的。
答案 0 :(得分:0)
注意:如果还有更多知识渊博的人可以告诉我为什么这样做不好,请这样做。
一段时间后,我发现* .g.cs文件是从XAML生成的。对于与ViewModel中方法不同步的事件绑定的事件显示警告(?)
示例PageExample.xaml.g.cs:
case 15: // Views\PageExample.xaml line 72
this.obj15 = (global::Windows.UI.Xaml.Controls.ToggleMenuFlyoutItem)target;
this.obj15Click = (global::System.Object p0, global::Windows.UI.Xaml.RoutedEventArgs p1) =>
{
//Warning CS4014 because of line below.
//I can add await before this line all I want,
//but the file gets regenerated anyway.
this.dataRoot.ViewModel.Refresh();
};
((global::Windows.UI.Xaml.Controls.ToggleMenuFlyoutItem)target).Click += obj15Click;
this.bindingsTracking.RegisterTwoWayListener_15(this.obj15);
break;
示例XAML PageExample.xaml:
<ToggleMenuFlyoutItem Text="Toggle" Click="{x:Bind ViewModel.Refresh}" />
ViewModel.cs示例:
//Warning CS4014 on the .g.cs file because this is async
public async Task Refresh()
{
//code you actually want
}
我尝试仅使用async void
方法更改为Refresh
,但似乎有一种影响,导致我的情况下出现计时问题。
这似乎是可行的。丑陋,但似乎可以解决警告。
ViewModel.cs:
//No more warning CS4014 since it's async void
public async void Refresh()
{
await RefreshAsync();
}
public async Task RefreshAsync()
{
//code you actually want
}
我想,按照乔恩的评论,这是合理的:
//no need to be async void
public void Refresh()
{
//discard
_ = RefreshAsync();
}