gpt4 book ai didi

c# - 为什么没有 IAwaitable 和 IAwaiter 接口(interface)

转载 作者:行者123 更新时间:2023-12-03 17:00:48 32 4
gpt4 key购买 nike

我最近了解到有自定义等待类型的可能性,并且作为 this问题和 Stephen Toub状态,有几个要求是等待类型。

所以如果一个类型 T想要等待它必须

  • 公开无参数方法GetAwaiter返回一个有效的等待者

  • 如果一个类型 A想成为一个有效的等待者,它必须
  • 实现 INotifyCompletion接口(interface)
  • 提供一个名为 IsCompleted 的 bool 属性
  • 提供无参数GetResult返回 void 的方法或 TResult

  • 所以现在我要问是否所有这些都需要成为可等待类型,为什么某些接口(interface)的那部分不是

    public interface INotifyCompletion
    {
    bool IsCompleted { get; }
    void OnCompleted(Action continuation);
    }

    public interface IAwaiter : INotifyCompletion
    {
    void GetResult();
    }

    public interface IAwaitable<TAwaiter> where TAwaiter : IAwaiter
    {
    TAwaiter GetAwaiter();
    }

    public interface IAwaiter<TResult> : INotifyCompletion
    {
    TResult GetResult();
    }

    // this would probably not necessary but would likely help to identify
    // awaitables that return a value
    public interface IAwaitable<TAwaiter, TResult> where TAwaiter : IAwaiter<TResult>
    {
    TAwaiter GetAwaiter();
    }

    我也明白编译器不需要它,因为它可以在编译时检查所有这些而不会受到任何惩罚。但是既然有 INotifyCompletion OnCompleted() 的接口(interface)方法,为什么在某些接口(interface)中没有将 awaitables 和 awaiters 的其余接口(interface)打包?

    这很可能有助于告知程序员如何实现这一点。

    我也知道可以通过提供返回有效等待者的扩展方法来使类型可等待,但是为什么等待者的整个接口(interface)没有打包在单个接口(interface)中但有漏洞(即 IsCompleted 属性不是任何接口(interface)的一部分,但需要)?

    最佳答案

    IAwaiter IAwaitable 如果您想使用它们,接口(interface)是可用的。

    请注意,它们不是强制使用的,但如果您觉得它们会让您的生活更轻松 - 请随意使用它们。

    这个blog post可能也值得一读。

    关于c# - 为什么没有 IAwaitable 和 IAwaiter 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61075432/

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