码迷,mamicode.com
首页 > 其他好文 > 详细

async await 同步方法调用异步方法死锁

时间:2018-05-17 13:33:04      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:lse   ken   span   使用   todo   figure   void   时间   set   

同步方法调用异步方法
.GetAwaiter().GetResult()
计算函数超时,异步方法所有的回调操作都会期望返回到主线程。

所以会导致各种线程死锁。异步方法中使用ConfigureAwait(false)解决

 1 public void Check(){
           //todo
2 //验证userid和token是否匹配 3 var tUserId = UserIdAndTokenValidationAsync(userId, at.UserId); 4 //验证参数签名是否正确 5 Task<bool> tvalid = CheckSignatureAsync(paramList, signature, at.Token); 6 //验证请求时间 7 Task<bool> tTicks = TicksValidationAsync(signature, timestamp); 8 9 bool userIdRes = tUserId.GetAwaiter().GetResult(); 10 bool validRes = tvalid.GetAwaiter().GetResult(); 11 bool ticksRes = tTicks.GetAwaiter().GetResult(); 12 }
        public async Task<bool> UserIdAndTokenValidationAsync(int requsetUserId, int tokenUserId)
        {
            bool res = await Task.Factory.StartNew(() =>
            {
                return UserIdAndTokenValidation(requsetUserId, tokenUserId);
            }).ConfigureAwait(false);
            return res;
        }

 

async await 同步方法调用异步方法死锁

标签:lse   ken   span   使用   todo   figure   void   时间   set   

原文地址:https://www.cnblogs.com/Jerrycjc/p/9050307.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!