【发布时间】:2017-03-23 12:55:41
【问题描述】:
我已经开始将ConfigureAwait(false) 与所有异步 sql 对象一起使用。
connection.OpenAsync().ConfigureAwait(false);
cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
但我担心的是,这种方法会有什么影响吗?
由于这将在一个线程池上运行,该线程池是一个单独的线程,我不确定如果我们不在单个线程上运行它会产生什么后果。
我们的应用程序是 wcf 服务,它将并行处理 1000 条记录。
如果有人帮助识别可能出现问题的业务场景,那将是有帮助的。
谢谢
【问题讨论】:
-
如果你不知道如何或为什么要使用它,你为什么要把它贴在所有东西上?
-
在这里大声思考(我从未调查过),但我怀疑如果您使用
ConfigureAwat(false),环境事务(又名TransactionScope)会非常失败 - 但是:我实际上并没有检查它们是否与aysncwithoutConfigureAwait(false)一起使用 :) -
我选择它是因为它会在多核环境中提升性能
-
@MarcGravell 有一个特殊的 constructor(从 .NET 4.5.1 开始),它允许您告诉
TransactionScope它是否应该通过异步延续。但是如果你不使用这个构造函数(我认为大多数情况下) - 它不会流动。几天前我回答了一个问题,当时 OP 使用TransactionScope和 await 没有这个构造函数,这导致了令人惊讶的结果...... -
我实际上最不关心我没有使用的 c# TransactionScope 对象。我在 Store Proc 中关注所有包含 SQL 事务的存储过程调用
标签: c# sql multithreading async-await configureawait