gpt4 book ai didi

c# - 调用异步方法的两种方式。 C#

转载 作者:行者123 更新时间:2023-12-03 23:11:47 25 4
gpt4 key购买 nike

这两种方法有区别吗?或者程序在这两种情况下运行相似?如果有差异,你能说出这些差异是什么。

第一种方法:

Task myTask = MyFunctionAsync();
await myTask;

第二种方法:
await MyFunctionAsync();

最佳答案

简短版本:“不是真的,至少不是以一种有趣的方式”

长版:WAITING对象不限于 Task/Task<T> ,所以有可能(实际上是微不足道的)创建编译良好的代码:

await MyFunctionAsync();

但不编译:

Task myTask = MyFunctionAsync();
await myTask;

仅仅是因为 MyFunctionAsync()返回不是任务的东西。 ValueTask<int>就足够了,但如果你愿意,你可以制作异国情调的等待物。但是:如果我们替换 Taskvar , IE。

var myTask = MyFunctionAsync();
await myTask;

那么现在唯一的区别就是我们可以引用 myTask如果我们愿意,可以在代码的其他位置。这并不少见。两个主要场景是
  • 结合对并发代码的多个检查,也许使用 WhenAnyWhenAll
  • (通常在 ValueTask[<T>] 的情况下)检查 awaitable 是否同步完成,以避免同步情况下的状态机开销
  • 关于c# - 调用异步方法的两种方式。 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61899946/

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