gpt4 book ai didi

c# - 接口(interface)可以为 Sync 和 Async 方法提供方法吗?

转载 作者:行者123 更新时间:2023-12-05 08:23:09 26 4
gpt4 key购买 nike

如何使用异步和同步方法创建类接口(interface)?

我正在创建一个实现以下功能的接口(interface)服务:

public Interface IService<T> where T : class{
T Get(int id);
bool Add(T entity);
bool Remove(int id);
bool Update(T entity);
}

但是应用程序上下文中的某些操作是异步方法,例如: userManager.CreateAsync(user, password)在 UserManager 类中。

然后我有两个选择。

  1. 使用...GetAwaiter().GetResult();在同步方法中进行异步调用。
  2. 使整个应用程序和我的界面异步 Tasl<bool> async Add(T entity){ ... }

他们都有自己的问题。

  1. ...GetAwaiter().GetResult();可以产生一些不需要的死锁,如前所述 here
  2. 我需要将所有方法链接起来成为异步的。

接口(interface)是否可以提供同步和异步方法?

最佳答案

异步方法只是返回任务而不是原始值的方法。就这样。当然,如果需要,您可以让界面同时包含 void Update()Task UpdateAsync(),从而同时支持同步和异步操作。

但是,这不一定是最好的做法。如果您的操作依赖于异步操作,例如您的 CreateUserAsync 示例,则您用来将它们转换为同步操作的代码可能不稳定且危险。异步代码最适合一直异步 up ,并让原始调用者决定何时等待。

当您说“两个 [选项] 都有自己的问题”时,但是当您将它们拼写出来时,很明显它们并不是真正相同的问题。 “可以在运行时产生死锁”与“需要重写我的更多异步代码”对我来说是一个无需思考的问题。一路异步。

关于c# - 接口(interface)可以为 Sync 和 Async 方法提供方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49212881/

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