 悬赏园豆:10
                [已解决问题] 
            
                    解决于 2019-10-12 08:59
                悬赏园豆:10
                [已解决问题] 
            
                    解决于 2019-10-12 08:59 
                 
        接口被请求后,立即响应200,具体业务在接口中新开线程处理。
目前是这么做的,也没啥问题。
后来试着用async/task/await改造,但发现无法实现这个效果。因为使用await [具体task]后,虽然主线程被释放了,但是task所在的线程却阻塞了整个流程。说好的异步呢?
不知道我理解的对不对?
    [Route("api/values/getAsync")]
    public async Task<string> GetAsync(int sleepTime)
    {
        var info = string.Format("GetAsync线程:{0}", Thread.CurrentThread.ManagedThreadId);
        var infoTask = await TaskCaller(sleepTime);
        var infoTaskFinished = string.Format("GetAsync线程:{0}", Thread.CurrentThread.ManagedThreadId);
        return string.Format("{0}______{1}______{2}", info, infoTask, infoTaskFinished);
    }
    private async Task<string> TaskCaller(int sleepTime)
    {
        await Task.Delay(sleepTime);
        return string.Format("TaskCaller线程:{0}", Thread.CurrentThread.ManagedThreadId);
    }我的理解是,await可以继续往下走不会阻塞主线程。但是你有返回值,而且用到了返回值,在用到infoTask的代码处,会等待异步线程执行完毕返回才可以继续
新开线程要用 Task.Run
或者试试去掉 await TaskCaller(sleepTime) 中的 await
你就在当前线程睡觉.为什么他要不卡在那里?