zoukankan      html  css  js  c++  java
  • 请教 C# 异步 async await 问题

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

    现在修改了异步方法,执行不会报错,程序正常结束。

     调用异步方法:

    不过新的问题:

    return 语句会先于异步方法执行,异步方法的耗时比较长,前端会等待异步方法执行完才真正return。

    虽然return json先执行,但是会等待异步方法中System.Diagnostics.Debug.WriteLine("GetSubsBySubsIdList End: " + result.ToString()); 这个执行完才返回json。

    如果异步方法超时,前端还是会timeout。怎样才能避免前端timeout,异步方法还能调用呢?

    这是为什么呢?

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

      

    之前对C#异步只是肤浅了解,请教一个问题。

    描述: 

    前台会发送一个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);
                });
    }

    程序会出错,错误信息:

    如果注释掉这个异步调用,可以正常运行。

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

     谢谢园友指教。

  • 相关阅读:
    源码分析:Java对象的内存分配
    源码分析:Java堆的创建
    Java Main如何被执行?
    HotSpot模板解释器目标代码生成过程源码分析
    Java常量池解析与字符串intern简介
    Java类的连接与初始化 (及2013阿里初始化笔试题解析)
    css中对position的几种定位方式的最佳诠释
    DB2学习笔记
    three.js:Failed to execute 'texImage2D' on 'WebGLRenderingContext解决方案
    线程隔离ThreadLocal
  • 原文地址:https://www.cnblogs.com/shy-huang/p/6956149.html
Copyright © 2011-2022 走看看