請教 C# 異步 async await 問題

==========更新2017.06.15============前端

如今修改了異步方法,執行不會報錯,程序正常結束。json

 調用異步方法:api

不過新的問題:數組

 

return 語句會先於異步方法執行,異步方法的耗時比較長,前端會等待異步方法執行完才真正return。異步

雖然return json先執行,可是會等待異步方法中System.Diagnostics.Debug.WriteLine("GetSubsBySubsIdList End: " + result.ToString()); 這個執行完才返回json。async

若是異步方法超時,前端仍是會timeout。怎樣才能避免前端timeout,異步方法還能調用呢?spa

 

這是爲何呢?3d

==========更新2017.06.15============code

  

以前對C#異步只是膚淺瞭解,請教一個問題。blog

描述: 

前臺會發送一個Array,這個數組都是 id的集合,比較大。分兩步,首先保存這些id,而後去調用異步方法。

能夠正常返回json,也能夠調用異步方法。可是過一下子,異步方法運行完就報錯。

這個 返回值 result 沒有使用。

想要保存id,也要通知異步方法開始運行。不等異步方法執行完,提早返回json,否則前端會timeout。

 

code:

public ActionResult AjaxAddSubcription(string LSINumber, string[] SubIdArr, int currentV)
{
            var returnJson = new AjaxJsonModel
            {
                ResultCode = -1,
                Message = "Add subs failed, pleast try it again.",
            };
            var newSubIds = SubIdArr.Distinct().ToList();
            // call Async method
            var result = ProcessDataAsync(newSubIds); //do other things
           //.....
            return Json(returnJson, JsonRequestBehavior.AllowGet);
}
//async method
static async Task<bool> ProcessDataAsync(List<string> subIdList)
{
            return await Task.Run(() =>
            {
                // call api   
                return SubscriptionDataHelper.GetSubsBySubsIdList(subIdList);
            });
}

 

程序會出錯,錯誤信息:

 

 

若是註釋掉這個異步調用,能夠正常運行。

這個異步方法執行完後,程序是什麼狀態?會結束運行釋放資源麼?

 謝謝園友指教。

相關文章
相關標籤/搜索