c# - 异步方法 'anonymous' 不应返回 void

标签 c# asynchronous xamarin.forms prism anonymous-function

有人可以帮我解决这个问题吗?我已经尝试了一切。 我通常知道如何解决该问题,但不知道如何使用匿名方法。 DelegateCommand 有 2 个构造函数。

1)公共(public)DelegateCommand(操作executeMethod)

2)public DelegateCommand(ActionexecuteMethod,FunccanExecute)。

我想知道是否有可能删除该警告。需要异步和等待,否则我的方法: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()
    {

    }
...

最佳答案

async wait 仅与 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 引发的任何异常都不会被注意到

或使用支持异步函数的更好的委托(delegate)命令。就我个人而言,我喜欢 Nito.Mvvm.Async 中的 AsyncCommand NuGet 包由 Stephen Cleary 编写.

...
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,这样除非操作完成,否则用户无法重复单击。

关于c# - 异步方法 'anonymous' 不应返回 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46353690/

相关文章:

c# - 聚合可能不会出现在 WHERE 子句中,除非它在子查询中

c# - 自 C# 以来的 C++ 代码等效吗?

c# - Mono 和 Linq 聚合方法。尝试将项目添加到新列表时出错

android - ListView - 图像在滚动时随机播放

ios - 如何从 Xamarin.iOS 中的 WidgetKit 访问 WidgetCenter?

xamarin.forms - 如何退出(或导航出)MasterDetail 页面到 Xamarin 中的简单 ContentPage。形式?

ios - Xamarin.Forms - 从 MVVMCross 4 迁移到 5 - MvxFormsApp 不存在?

c# - 如何在单个 Razor View 中编辑多个模型

javascript - 即使在用户通过 javascript 导航离开后,ASP.NET 是否继续可靠地处理请求?

python - 如何在Python中异步记录stdout/stderr?