当你的才华不能撑起你的野心时,就是你该选择学习的时候了!

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

 异步调用同步方法需要.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中。

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

posted @ 2023-11-07 10:34  hofmann  阅读(434)  评论(0)    收藏  举报