如何使用异步和同步方法创建类接口(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 类中。
然后我有两个选择。
- 使用
...GetAwaiter().GetResult();
在同步方法中进行异步调用。 - 使整个应用程序和我的界面异步
Tasl<bool> async Add(T entity){ ... }
他们都有自己的问题。
-
...GetAwaiter().GetResult();
可以产生一些不需要的死锁,如前所述 here - 我需要将所有方法链接起来成为异步的。
接口(interface)是否可以提供同步和异步方法?
最佳答案
异步方法只是返回任务而不是原始值的方法。就这样。当然,如果需要,您可以让界面同时包含 void Update()
和 Task UpdateAsync()
,从而同时支持同步和异步操作。
但是,这不一定是最好的做法。如果您的操作依赖于异步操作,例如您的 CreateUserAsync
示例,则您用来将它们转换为同步操作的代码可能不稳定且危险。异步代码最适合一直异步 up ,并让原始调用者决定何时等待。
当您说“两个 [选项] 都有自己的问题”时,但是当您将它们拼写出来时,很明显它们并不是真正相同的问题。 “可以在运行时产生死锁”与“需要重写我的更多异步代码”对我来说是一个无需思考的问题。一路异步。
关于c# - 接口(interface)可以为 Sync 和 Async 方法提供方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49212881/