如何制作调用外部 C# dll 的异步操作方法

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

我的 ASP.NET Core Web API 项目中有操作方法 调用外部 C# dll 中的函数。 这些函数对我传递给它们的数据进行计算并将输出返回给我。 我如何异步执行我的操作函数? 还有必要这样做吗?

      [HttpPost]       
    public IActionResult SetClac([FromBody] CalcRequest calcRequest)
    {
        try
        {
            
            IClacSdk clacSdk = new CalcSdk();
            ClacResult clacResult = clacSdk.clac(calcRequest.id , calcRequest.username)
                                                                            
            CustomeResponse customeResponse = new CustomeResponse()
            {
                ErrorDescription = clacResult.ErrorDescription,
                ErrorNum = clacResult.ErrorNum,
                ClacResult = clacResult.Result
            };
            return Ok(customeResponse);
        }
         catch (Exception exc)
        {
            return StatusCode(500, (GetErrorFormat(exc)));
        }
        
    }
c# asynchronous asp.net-core-webapi
1个回答
1
投票

我如何异步执行我的操作函数?

您可以将它们包装在

Task.Run
中(尽管它不会使操作“真正”异步)。即:

ClacResult clacResult = await Task.Run(() => clacSdk.clac(calcRequest.id , calcRequest.username));

还有必要这样做吗?

不。更重要的是,在一般情况下,在 ASP.NET Core 的上下文中,建议不要这样做,因为它会对服务器吞吐量产生负面影响(尽管如果您想要并行执行多个计算,并且单独的响应时间是您的优先事项)可以杠杆

Task.Run
)。

如果您想深入挖掘,可以从多种资源开始:

  1. .NET 中的异步编程 - 简介、误解和问题
  2. 官方文档(在这种情况下这个讨论I/O密集型和CPU密集型代码可能很有用)
  3. Stephen Cleary 的文章(尤其是There Is No Thread,我觉得非常有趣)
© www.soinside.com 2019 - 2024. All rights reserved.