使用 ASP.NET Core 进行基于 LibreOffice 的文件转换是否需要锁定和单例?

Are locking and singletons necessary for LibreOffice-based file conversion with ASP.NET Core?

我的任务是在 ASP.NET 核心应用程序中创建一个文件转换器。转换将由 LibreOffice 执行,我已经让它处于工作状态(就像使用适当的参数在无头模式下调用 LibreOffice 一样简单)。我还读到 LibreOffice 不允许同时在内存中使用多个实例,因此使用锁似乎是一个很好的解决方案。

原型代码如下:

public void ConvertDocument(string inputPath, Guid objId)
{
    lock (_lock_obj)
    {
        //Console.WriteLine(objId);
        try
        {
            var target_path = Path.Combine(Path.GetTempPath(), "Conversor");
            if (!Directory.Exists(target_path))
            {
                Directory.CreateDirectory(target_path);
            }
            using (var p = new Process())
            {
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.FileName = @"C:\Program Files\LibreOffice\program\soffice.exe";
                p.StartInfo.WorkingDirectory = target_path;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.Arguments = $"--headless --convert-to pdf --outdir {target_path} \"{inputPath}\"";
                p.Start();
                p.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            //Console.WriteLine($"Error. Id: '{objId:D}', mensaje : '{ex.Message}'.");
        }
    }
}

将实现此方法的 class 将被注入到控制器中。

我的问题是:这个 class 应该作为 Singleton 注入吗?或者它可以作为 Scoped 毫无问题地注入吗?

I've also read that LibreOffice does not allow more than one instance in memory at the same time

就像这个限制,我认为在服务器上,同时只能有一个实例运行。所以这个 class 作为单例注入。

原因

Scoped objects are the same within a request, but different across different requests.

如果你使用AddScoped,很多请求可以调用soffice.exe

我的建议

我认为 soffice.exe 不是您的最佳选择。

假设您有500个用户,一个文档需要处理一分钟。所以只有 60 个用户可以在一小时内完成他们的操作。这是很不合理的。

建议使用其他三方SDK满足更多需求