".RunSynchronously()和GetAwaiter().GetResult()之间的区别是什么?"

15
我试图将异步任务以同步方式运行,想知道 .RunSynchronously()GetAwaiter().GetResult() 之间的区别。
我看到了很多比较 .Wait() 和这两种方法的文章,但没有将它们彼此比较的内容。
1个回答

12

RunSyncronously 表示在当前线程和当前调度程序上运行委托。但是,如果目标调度程序不支持在调用线程上运行此任务,则任务将被安排在调度程序上执行,并且调用线程将阻塞,直到任务完成执行。

另一方面,WaitGetAwaiter().GetResult() 根本不安排 Task,它只是阻塞调用线程直到任务完成。如果从单线程同步上下文中调用该操作,可能会发生死锁。

MSDNDocs


1
那么 RunSyncronously 永远不会导致死锁吗? - Nick N.
想跟进一下这个问题(帮助我识别了一个问题)。如果您正在使用Azure WebJobs,您需要使用GetAwaiter().GetResult(),否则在使用多个工作器时,任何数据库命令和读取器对象都会出现错误。您需要使用WebJobs进行阻塞。 - Dave Friedel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接