请教 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);
            });
}

 

程序会出错,错误信息:

 

 

若是注释掉这个异步调用,能够正常运行。

这个异步方法执行完后,程序是什么状态?会结束运行释放资源么?

 谢谢园友指教。

相关文章
相关标签/搜索