具有阻塞方法的开源库是否应该提供异步执行选项?

问题描述 投票:0回答:1

背景:

我正在创建一个我想要开源的库。 该库设计用于后端进程。 我将提供的服务利用 Java 的

ProcessBuilder
来执行多个本机命令。 该服务通常会在 1 秒内完成命令处理,但在极少数情况下,可能需要几分钟。

问题:

在公共库的方法可能会阻塞的情况下,库是否应该提供异步选项来调用该方法?或者这样的库应该保持不发表意见,并将其留给用户来实施?

以下是我一直在考虑如何实施这项服务的几种方法......

示例1:没有主见

  • SomeService
    ,带阻塞方式
  • 如果用户想要异步运行,他们必须弄清楚

SomeService.java

public class SomeService {
    public Response process(Request request) {
        //do stuff for 60 seconds
    }
}

示例2:固执己见

  • SomeService
    ,带阻塞方式
  • 可选
    SomeProcessTask
    ,用户可以利用它绕过阻塞方法并运行异步。

SomeProcessTask.java

public class SomeProcessTask implements Callable<Response> {
    private final Request request;

    public SomeProcessTask(Request request) {
        this.request = request;
    }

    @Override
    public Response call(Request request) {
        //do stuff for 60 seconds
    }
}

SomeService.java

public class SomeService {
    public Response process(Request request) {
        SomeProcessTask task = new SomeProcessTask(request);
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<Response> future = executor.submit(task);
        return future.get();
    }
}
java asynchronous concurrency open-source processbuilder
1个回答
0
投票

您评论:

我对并发不太有经验

那么你绝对不应该尝试让你的库同时运行。并发是很棘手的。

保持你的库简单。专注于其核心目的。如果调用程序员认为并发很重要,则让他们处理并发。

© www.soinside.com 2019 - 2024. All rights reserved.