我理解async不应该使用void
作为返回类型,除非它是一个事件处理程序。但是我上面有代码片段,当我在项目设置中将警告设置为错误时,我在编译代码时遇到了上述错误。
RECS0165异步方法''不应该返回无效
如果我删除async
,那么我会收到另一个编译错误
等待'运算符只能在异步lambda中使用 表达。考虑使用' async'标记这个lambda表达式。 改性剂。
建议的修复方法是将async
添加到匿名函数中。这是一个死锁。
我在这里做错了吗?
重现问题的步骤:
在MainPage.Xaml.cs中添加以下代码
命名空间App4 { 使用系统; 使用System.Threading.Tasks; 使用Windows.ApplicationModel.Core; 使用Windows.UI.Core; 使用Windows.UI.Xaml; 使用Windows.UI.Xaml.Controls;
public sealed partial class MainPage : Page
{
private DispatcherTimer refreshTimer;
public MainPage()
{
this.InitializeComponent();
this.refreshTimer = new DispatcherTimer()
{
Interval = new TimeSpan(0, 0, 30)
};
refreshTimer.Tick += async (sender, e) => { await DisplayMostRecentLocationData(string.Empty); };
}
private async Task DisplayMostRecentLocationData(string s)
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
});
}
}
}
答案 0 :(得分:3)
Tick
事件处理程序委托不正确。
使用
async (sender, e) => ...
或为EventArg
e
派生类
async (object sender, EventArgs e) => ...
您目前拥有的是您尝试指定为事件处理程序的匿名对象。编译器不允许这样做错误。
答案 1 :(得分:1)