按钮单击事件处理程序并使用异步无效

问题描述

我对 async void 和按钮处理程序感到困惑。我在视频教程中听说使用 async void 是不明智的。我已经查看了这些问题:

在许多答案中,它确实使用了这种语法。因此我的困惑。 ?

这是我的处理程序:

async private void InstallStyleButton_Clicked(object sender,EventArgs e)
{
    var customFileType =
        new FilePickerFileType(new Dictionary<DevicePlatform,IEnumerable<string>>
        {
            {DevicePlatform.macOS,new[] {"xsl"} }
        });

    var pickResult = await FilePicker.PickAsync(new PickOptions
    {
        FileTypes = customFileType,PickerTitle = "Select template to install"

    });

    if(pickResult != null)
    {
        // Build target path
        string targetFile = Path.Combine("/Users/Shared/VisitsRota.MacOS/Styles",pickResult.FileName);

        // OK to install?
        if(!File.Exists(targetFile)) 
        {
            // Install
            File.copy(pickResult.FullPath,targetFile);

            // Add it
            StylesPicker.ItemsSource.Add(pickResult.FileName);

            // Select it
            StylesPicker.SelectedItem = pickResult.FileName;
        }
    }
}

我意识到硬编码文件夹路径不是一个好主意,我最终会解决这个问题。除此之外,当我尝试时,我的处理程序似乎在我的开发 MacBook Pro 上运行良好。

我将 async void 与按钮处理程序一起使用可以吗?如果没有,我的处理程序应该如何调整?

解决方法

我在 link 处找到了它:

总结第一条准则,您应该更喜欢 async Task 而不是 async voidAsync Task 方法使错误处理、可组合性和可测试性更容易。 此指南的例外是异步事件处理程序,它必须返回 void

所以我的代码没问题。