我有一些简单的代码,我想异步执行:
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/