设计具有长时间运行任务的接口

本文关键字:任务 接口 运行 长时间 | 更新日期: 2023-09-27 18:01:04

我即将设计一个接口,其中包含一个触发长时间运行操作的函数。

现在,我不确定我是否应该在接口本身中提供这一点,或者由调用方决定是调用阻塞还是异步。

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返回Task,以便客户端在需要时可以轻松等待完成。