加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在方法签名中添加异步是一个重大改变吗?

发布时间:2020-12-15 23:39:29 所属栏目:百科 来源:网络整理
导读:在解决关于使用异步/等待多少的问题时,即“所有方法应该返回任务吗?”,this answer的作者MatíasFidemraizer声称,即使你的方法目前只做同步的东西,它仍然应该返回一个任务因此,如果你以后再做异步操作,“你可以把它变成实际的异步操作,而不会影响整个代码库
在解决关于使用异步/等待多少的问题时,即“所有方法应该返回任务吗?”,this answer的作者MatíasFidemraizer声称,即使你的方法目前只做同步的东西,它仍然应该返回一个任务因此,如果你以后再做异步操作,“你可以把它变成实际的异步操作,而不会影响整个代码库”.这是有道理的,但如果我实际上在等待某些东西,我必须在方法签名中添加异步.所以我们谈论的是:

public Task WhateverAsync()
{
    return Task.FromResult(true);
}

public async Task WhateverAsync()
{
    return await AwaitableSomething();
}

将async添加到方法签名是一个重大改变吗?

解决方法

even if your method currently only does synchronous stuff,it should still return a task

我不同意.如果您的方法是同步的,那么它应该具有同步API.如果您的方法是异步的,那么它应该有一个异步API.

但是,我同意,如果同步方法在接口/基类中定义,并且未来的实现/覆盖可能需要使用等待,那么同步方法应具有返回任务的签名.

Is adding async to a method signature a breaking change?

只是添加异步?不它不是.考虑在接口中定义的任务返回方法的情况:它可以使用或不使用异步来实现.

但是,正如我在博客中描述的那样,有一些可能的differences in semantics.最值得注意的是异常处理是不同的.如果你不小心,一个天真的同步实现可能会直接抛出异常,而不是返回一个错误的任务.只要将该方法设置为异步,异常就会导致任务错误,并且不再直接抛出.

所以,这真的是一个关于语义可能发生变化的问题.我认为天真的同步语义是错误的,因为该方法具有异步签名.例如,同步方法具有异步签名,因此调用者认为它将捕获异常并返回故障任务是合理的.因此,如果同步实现具有这些(易于导致的)错误,那么在技术上添加异步将是一个重大变化.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读