异步方法'匿名'不应该返回无效
问题描述:
有人可以帮我解决这个问题我尝试了一切。 我通常知道如何解决这个问题,但不是使用匿名方法。 DelegateCommand有2个构造函数。异步方法'匿名'不应该返回无效
1)公共DelegateCommand(动作executeMethod)
2)公共DelegateCommand(动作executeMethod,Func键canExecute)。
我想知道是否有可能如何删除该警告。需要异步和等待,否则我的方法:enterButtonClicked();将被同步调用。那么你有什么被认为是“异步空缺”你不应该这样做
...
public DelegateCommand EnterButton { get; set; }
public StartPageViewModel()
{
Title = "title_black.png";
PasswordPlaceholder = "Lozinka";
EnterButton = new DelegateCommand(async() => { await enterButtonClicked();}); // <----- I am getting that warning here
}
public async Task enterButtonClicked()
{
}
...
答
异步等待只与Func<Task>
或Func<Task<T>>
兼容的,如果你不有。
你两个选项是不等待任务
...
public DelegateCommand EnterButton { get; set; }
public StartPageViewModel()
{
Title = "title_black.png";
PasswordPlaceholder = "Lozinka";
EnterButton = new DelegateCommand(() => { var temp = enterButtonClicked();});
}
public async Task enterButtonClicked()
{
}
...
这意味着通过enterButtonClicked募集的资金将被忽视
或使用支持异步功能不如授人命令的任何异常。我个人喜欢Stephen Cleary编写的Nito.Mvvm.Async NuGet包中的AsyncCommand。
...
public AsyncCommand EnterButton { get; set; }
public StartPageViewModel()
{
Title = "title_black.png";
PasswordPlaceholder = "Lozinka";
EnterButton = new DelegateCommand(enterButtonClicked); //you can just use a delegate, no method needed.
}
public async Task enterButtonClicked()
{
}
...
的AsyncCommand
代表,而正在运行的任务因此一个人不能多次点击,除非该行动已完成设置CanExecute
为false。
+0
非常感谢你给出了非常好的解释。 –
您需要向我们展示DelegateCommand的构造函数的签名。最有可能的是,你正在创建一个“async void”函数,因为DelegateCommand不包含一个接受'Func'的构造函数。只要做'新的DelegateCommand(enterButtonClicked)',它应该更明显是什么问题。 –
它有两个构造函数1)public DelegateCommand(Action executeMethod)和2)public DelegateCommand(Action executeMethod,Func canExecute)。我想知道是否有可能如何删除该警告。异步和等待需要,否则我的方法:enterButtonClicked();将同步呼叫。 –