gpt4 book ai didi

c# - 为什么 "async void"方法会同步运行?

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:21 26 4
gpt4 key购买 nike

Here埃里克·利珀特说:

A void returning async method cannot be awaited; it is a "fire and forget" method. It does work asynchronously...

它确实是异步工作的吧?

为了对此进行测试,我制作了一个 Windows 窗体应用程序并处理了一个任意事件。在 handler 内部,我开始了繁重的计算。显然,它阻止了 UI 响应:

this.KeyPress += Form1_KeyPressed;
....
private async void Form1_KeyPressed(object sender, EventArgs e)
{
for(int i=0; i<int.max; i++)
;
}

我在 Eric 的回答中遗漏了什么?

最佳答案

What am I missing in Eric's answer?

我的意思是它像任何其他异步方法一样工作。当您在异步方法中等待某些内容时,该方法的其余部分将被注册为等待内容的延续。无论异步方法是否为 void 都是如此。

在您的示例中,您的代码的工作方式与返回任务的异步方法完全一样。尝试更改您的方法以返回任务,您会发现它的行为完全相同。

请记住,“异步”并不意味着“我在另一个线程上并发运行”。这意味着“该方法可能会在其操作完成之前返回”。在其 Action 完成之前它可能返回的点被标记为“等待”。您还没有用“等待”标记任何内容。

我怀疑您相信异步需要并发的神话。重申一遍:异步只是意味着一个方法可以在其工作完成之前返回。你开始煮鸡蛋,门铃响了,你去门廊拿包裹,煮完鸡蛋,打开包裹。 “煮鸡蛋”和“取邮件”工作不是并发——您永远不会同时完成它们。它们是异步的

关于c# - 为什么 "async void"方法会同步运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33731376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com