【问题标题】:<Class X> does not contain a definition for GetAwaiter - how to rewrite this method<Class X> 不包含 GetAwaiter 的定义 - 如何重写此方法
【发布时间】:2021-07-24 02:44:45
【问题描述】:

我得到了这个代码:

    public async Task myServerResponse()
    {
        Task.Run(new Func<Task>(..));
        await this.ConnectSomewhere(...); 
        ...
        // this method does not have any return
    }


    private async Task Connect()
    {
        try
        {
            bool myFlag = true;
            var taskAwaiter = this.myServerResponse().GetAwaiter();
            if (!taskAwaiter.IsCompleted)
            {
                await taskAwaiter;
                taskAwaiter = default(TaskAwaiter);
                myFlag = false;
            }
            if (myFlag)
                taskAwaiter.GetResult();
            
            ...

但是,在上面写着await taskAwaiter; 的地方显示

错误 CS1061:“TaskAwaiter”不包含“GetAwaiter”的定义,并且找不到接受“TaskAwaiter”类型的第一个参数的可访问扩展方法“GetAwaiter”(您是否缺少 using 指令或程序集引用? )

如何正确重写此方法?我认为那里的方法过于复杂。

【问题讨论】:

    标签: c# async-await


    【解决方案1】:

    好吧,看来您可以只使用async await 并删除其余的东西:

     private async Task Connect()
        {
            try
            {
                await this.myServerResponse();
                ...
    

    【讨论】:

    • 谢谢,辛苦了。最后一个问题 - 我已经更新了实际使用一些奇怪标志的问题。您能否在答案中也包含该案例?
    • 好吧,更新后的代码没有多大意义。试图模仿异步等待行为,我必须说这是一个糟糕的行为。只有当它“准备好”但await this.myServerResponse(); 已经涵盖了该位时,我们才会尝试获得结果。另一件事是如何处理结果,您可能希望将其保存到变量中并稍后使用,但这取决于手头的任务
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2017-04-20
    • 2017-11-20
    • 2018-08-21
    • 2016-12-15
    • 2017-04-08
    相关资源
    最近更新 更多