我正在设计一个存储库,但我有这个疑问。
我应该将其设计为阻止操作还是异步?
我倾向于认为阻塞更优雅,因为用户可以在需要时将调用包装为异步
Task.Run( () => repository.Get(...));
您怎么看?
答案 0 :(得分:2)
由于基础数据源在大多数情况下是自然异步的(Web服务,数据库,文件),因此async
API是首选方式。
阻塞更优雅,因为用户可以在需要时将调用包装为异步
实际上,反之亦然 如果需要,用户(not you!)可以将异步调用包装到同步调用中:
Task<MyObj> DoSomethingAsync() { ... }
MyObj DoSomething()
{
return DoSomethingAsync().Result;
}
虽然:
Task.Run( () => repository.Get(...));
被称为"async over sync",必须避免:
我们应该为一个方法公开一个异步入口点 实际上同步?我们在.NET 4.5中采取的立场 基于任务的异步模式是一个坚定的“不”。