Здравствуйте, Danchik, Вы писали:
D>Дабы не пересказывать
D>https://github.com/linq2db/linq2db/issues/1754
D>https://github.com/linq2db/linq2db/issues/1859
Признаться понятней не стало.
Using ConfigureAwait(false) to avoid deadlocks is a dangerous practice. You would have to use ConfigureAwait(false) for every await in the transitive closure of all methods called by the blocking code, including all third- and second-party code. Using ConfigureAwait(false) to avoid deadlock is at best just a hack).
Логично. Проставление везде ConfigureAwait(false) в клиентском коде, в попытке избежать дедлоков, не есть хорошая идея, т.к. мы не можем гарантировать, что в библиотеках, которые мы вызываем, он везде проставлен.
Ок, но как из этого вытекает необходимость Configuration.ContinueOnCapturedContext в linq2db?
ConfigureAwait(false) делается не для того, чтобы небыло дэдлока на стороне клиентского кода, когда в нем кто-то делает синхронный Wait.
ConfigureAwait(false) делается, когда нет необходимости выполнять продолжение метода в том же контексте, что был перед await.
На сколько понимаю, в linq2db именно этот случай, посколько все работает так же, когда Configuration.ContinueOnCapturedContext==false.