簡體   English   中英

如何制作調用外部 c# dll 的異步操作方法

[英]How to make async action method that call to external c# dll

I have action method in my ASP.NET Core Web API project that call to function in external C# dll. 這些函數對我傳遞給它們的數據進行計算,並將 output 返回給我。 我如何做我的動作 function 異步? 甚至有必要這樣做嗎?

      [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)));
        }
        
    }

我如何做我的動作 function 異步?

您可以將它們包裝在Task.Run中(盡管它不會使操作“真正”異步)。 IE:

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

甚至有必要這樣做嗎?

不。甚至更多 - 在 ASP.NET Core 的上下文中,一般情況下建議不要這樣做,因為它會對服務器吞吐量產生負面影響(盡管如果您有多個要並行執行的計算並且單獨的響應時間是優先級,您可以利用Task.Run )。

如果你想挖掘北斗,有多種資源可以開始:

  1. .NET 中的異步編程 - 介紹、誤解和問題
  2. 官方文檔(在這種情況下,這個討論 I/O-bound 和 CPU-bound 的代碼可能很有用)
  3. Stephen Cleary 的文章(尤其 是沒有主題的文章,我個人覺得很有趣)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM