C# 设计具有长时间运行任务的接口
我将要设计一个接口,其中包含一个触发长时间运行操作的函数 现在我不确定我是否应该在接口本身中提供这一点,还是由调用方决定是否要将其称为blocking还是asyncC# 设计具有长时间运行任务的接口,c#,C#,我将要设计一个接口,其中包含一个触发长时间运行操作的函数 现在我不确定我是否应该在接口本身中提供这一点,还是由调用方决定是否要将其称为blocking还是async public interface I { int PerformTask(); // blocks long time void PerformTaskAsync(); // returns immediately event Action OnTaskFinished(int result); // t
public interface I {
int PerformTask(); // blocks long time
void PerformTaskAsync(); // returns immediately
event Action OnTaskFinished(int result); // triggers when task is finished
}
我应该在界面中同时使用这两种方式,还是最多选择一种?如果是,哪一个?取决于此接口所在的体系结构 如果构建环境时遵循了在必要时解耦客户端的准则/实践,则使用阻塞调用。如果环境有预期短延迟的指南/实践,请使用异步版本
如果您可以使用C 5,请考虑PerformTaskAsync返回一个任务,以便客户端在需要时可以很容易地等待完成。p> 提供一个接口似乎可以减少您必须编写的单元测试的数量。当前的.NET代码使用任务,而不是您发布的EAP模式。如果您提供了一个像您发布的那样的接口,那么您的客户机将被迫使其适应任务,以便将其与其他异步代码相结合。只需提供一个
Task performtask async()
方法,并让客户端将其调用为int result=wait obj.performtask async()代码>