C# 异步,等待

标签 c# asynchronous async-await

我有一些简单的代码,我想异步执行:

public async Task EncryptAsync()
{
    for (int i = 0; i < 10; i++)
    {
        // shift bytes
        // column multiplication
        // and so on
    }
}

这就是我调用上面方法的方式:

private async void Encryption()
{
    ShowBusyIndicator();

    await encryptor.EncryptAsync();

    HideBusyIndicator();
}

要点是,当我在此方法中添加 await Task.Delay(1000); 时,会显示 busi 指示器,但 1 秒后,应用程序会锁定并同步等待加密完成。如果我删除 Task.Delay,应用程序将在操作完成后锁定和解锁。

在我的案例中如何正确使用 await 和 asyc?我只想异步执行方法 encryptor.EncryptAsync()

最佳答案

async/await 关键字不允许您创建新的异步;相反,它们只是让您等待现有的异步操作完成。

您想在后台线程上运行 CPU 密集型操作以避免阻塞 UI。
为此,请在传递给 Task.Run() 的 lambda 中调用同步阻塞方法。

然后您可以使用 await 来等待生成的异步操作(Task 实例)。

关于C# 异步,等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16886716/

相关文章:

java - 返回由异步方法返回的对象

c# - 发送邮件异步 : An asynchronous module or handler completed while an asynchronous operation was still pending

c# - await 将 HttpContext.Current 设置为 null/prior - 无法手动设置

使用自定义任务的 C# 任务重写功能

javascript - 使用 async.each 获取对象键

c# - 如何接受 'dictionary' 数据作为自定义 .NET 属性参数?

c# - 查找已安装的浏览器。微软边缘

c# - 在 C# 中不可能具有隐藏构造函数的嵌套类?

c# - 当 ItemsSource 与 ResourceDictionaries 或 MergedDictionaries 一起使用 setter 属性时,MenuItem 样式

c# - 使用 twilio 从 asp.net 异步发送短信