异步调用同步方法需要.GetAwaiter().GetResult() 

.Wait()或.GetAwaiter().GetResult()两者都是同步等待操作的结果(如果可能,应避免使用它们)

            var task = Task.Run(() => _creditScoreServiceExtension.CallCreditScoreService(queryRecordId, this.Input));
            task.GetAwaiter().GetResult();
//var task = Task.Run(() => _creditScoreService.ProcessQuery(postJson));
                    //task.GetAwaiter().GetResult();

                    var task = Task.Run(() => { return _creditScoreService.ProcessQuery(postJson); }).Result;

Task.Result与Task.GetAwaiter.GetResult()区别

Task.GetAwaiter().GetResult()会直接抛出异常,而Task.Result则会把异常包装在AggregateException中。从这个角度说Task.GetAwaiter().GetResult()要优于Task.Result。毕竟它少了异常的包装操作,即直接抛出异常,而不是把异常包装在AggregateException中。

通过上述内容的阐述,因此在那些必须对异步任务进行同步阻塞的场景中,我选择使用

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐