如何使用异步和同步方法创建类接口?
我正在创建一个实现的接口服务:
public Interface IService<T> where T : class{
T Get(int id);
bool Add(T entity);
bool Remove(int id);
bool Update(T entity);
}
Run Code Online (Sandbox Code Playgroud)
但是,应用程序上下文中的某些操作是异步方法,例如:
userManager.CreateAsync(user, password)在UserManager类中.
然后我有2个选择.
...GetAwaiter().GetResult(); 在同步方法中进行异步调用.Tasl<bool> async Add(T entity){ ... } 他们两个都有自己的问题.
...GetAwaiter().GetResult();可以产生一些不希望的死锁,如这里所说接口是否可以提供同步和异步方法的方法?
异步方法只是返回Task而不是原始值的方法.就这样.当然,您可以让您的界面同时包含a void Update()和a Task UpdateAsync(),从而支持同步和异步操作.
但是,这不一定是最好的行动方案.如果您的操作依赖于异步操作(例如您的CreateUserAsync示例),则用于将其转换为同步操作的代码可能会非常危险.异步代码最好是异步一路送达起来,并让上时,等待原主叫方决定.
当你说"两个[选项]都有自己的问题"时,比如说,但当你拼出它们时,很明显它们并不是真正平等的问题."可以在运行时生成死锁"与"需要重写更多我的代码为异步"对我来说是一个明智的选择.一路走异步.