异步调用同步方法需要.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中。
通过上述内容的阐述,因此在那些必须对异步任务进行同步阻塞的场景中,我选择使用