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

C# 设计具有长时间运行任务的接口,c#,C#,我将要设计一个接口,其中包含一个触发长时间运行操作的函数 现在我不确定我是否应该在接口本身中提供这一点,还是由调用方决定是否要将其称为blocking还是async public interface I { int PerformTask(); // blocks long time void PerformTaskAsync(); // returns immediately event Action OnTaskFinished(int result); // t

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

现在我不确定我是否应该在接口本身中提供这一点,还是由调用方决定是否要将其称为blocking还是async

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()