gpt4 book ai didi

c# 5 异步作为糖语法(或不是)?

转载 作者:太空狗 更新时间:2023-10-29 17:40:20 26 4
gpt4 key购买 nike

所以我在问this question关于async ,我认为它只是一个糖语法:

Task<..>...ContinueWith...

最后检查 Result属性(property)。

我什至问了一个问题here有人告诉我:

enter image description here

enter image description here

但是今天 I was corrected by Jon Skeet

“离那个还有很长的路要走”。

那么这两种方法之间的核心区别是什么?

最佳答案

添加了一个延续——但是手动构造那个延续可能会非常痛苦,因为需要随身携带关于我们到达的位置和本地状态是什么的所有信息。

作为一个非常的简单示例,我建议您尝试想出与此异步方法等效的方法:

public static async Task<int> SumTwoOperationsAsync()
{
var firstTask = GetOperationOneAsync();
var secondTask = GetOperationTwoAsync();
return await firstTask + await secondTask;
}

// These are just examples - you don't need to translate them.
private async Task<int> GetOperationOneAsync()
{
await Task.Delay(500); // Just to simulate an operation taking time
return 10;
}

private async Task<int> GetOperationTwoAsync()
{
await Task.Delay(100); // Just to simulate an operation taking time
return 5;
}

真正尝试提出与第一种方法等效的方法。我认为您会发现它需要大量代码 - 尤其是 如果您真的想每次都返回到适当的线程。 (例如,假设该异步方法中的代码还修改了 WPF UI。)哦,请确保如果任一任务失败,您返回的任务也会失败。 (如果第一个任务也失败,异步方法实际上会“错过”第二个任务的失败,但在我看来,这是一个相对较小的问题。)

接下来,如果您需要相当于 try 的代码,请计算出您需要如何更改您的代码/finallyasync方法。同样,这会使非异步方法更加复杂。这一切都可以完成,但这是一个令人头疼的问题。

所以是的,它“只是”语法糖。 foreach也是如此. for也是如此循环(或任何其他类型的循环)。在async的情况下/await ,它是语法糖,可以做很多事情来转换您的代码。

很多 视频和博客文章是关于异步的,我希望仅仅观看/阅读其中的一些就能让您有足够的洞察力来理解这远非一个小调整:它从根本上改变了正确编写大量异步代码的实用性。

此外,作为基于模式的,async/await 并不适用于Task/Task<T> .您可以等待任何符合可等待模式的东西。在实践中,很少有开发人员需要自己实现该模式,但它允许像 Task.Yield 这样的方法。返回 YieldAwaitable 而不是任务。

关于c# 5 异步作为糖语法(或不是)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17384118/

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