gpt4 book ai didi

c# - C# 5.0异步中的awaitable和awaiter

转载 作者:可可西里 更新时间:2023-11-01 08:42:03 25 4
gpt4 key购买 nike

Task 或 Task 对象是可等待的,因此我们可以在返回值为 Task 或 Task 的对象上使用等待键。Task 或 Task 是最常用的等待对象。

我们也可以定义自己的等待对象。该对象应具有以下条件。

  1. 它有一个GetAwaiter()方法(实例方法或扩展方法);
  2. 它的 GetAwaiter() 方法返回一个等待者。一个对象是一个等待者如果:
    • 它实现了 INotifyCompletion 或 ICriticalNotifyCompletion 界面;
    • 它有一个 IsCompleted,它有一个 getter 并返回一个 bool 值;
    • 它有一个 GetResult() 方法,该方法返回 void 或结果。

我的问题是为什么微软没有提供接口(interface)来约束这些等待对象?目前实现等待对象的方法有点复杂。

最佳答案

最好在 Lucian Wischik 的博文中回答 Why must async methods return Task?

总而言之(我不是在公正地对待博文,你应该阅读它),问题是 Task 已经存在,所以引入一个接口(interface)意味着

  • 所有内部方法都需要更改为接口(interface),这是一个重大更改,因此框架人员几乎不可能愿意这样做。
  • 作为一名程序员,您将经常需要决定是要返回 Task 还是返回接口(interface),这个决定并不重要。
  • 编译器总是需要一个具体类型,所以即使您从一个方法返回一个接口(interface),它仍然会被编译为 Task

上述影响如此巨大,以至于提供接口(interface)没有意义。

关于c# - C# 5.0异步中的awaitable和awaiter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14065030/

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