1. 程式人生 > >async await 同步方法調用異步方法死鎖

async await 同步方法調用異步方法死鎖

pre con int onf 調用 start ida get 超時

同步方法調用異步方法
.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 同步方法調用異步方法死鎖