c# – 使用ADO.Net SQLConnection对象的ConfigureAwait(false)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用ADO.Net SQLConnection对象的ConfigureAwait(false),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1241字,纯文字阅读大概需要2分钟。
内容图文
![c# – 使用ADO.Net SQLConnection对象的ConfigureAwait(false)](/upload/InfoBanner/zyjiaocheng/907/685af386dc8f4513ab0b5b4b307c8df0.jpg)
我已经开始对所有异步sql对象使用ConfigureAwait(false).
connection.OpenAsync().ConfigureAwait(false);
cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
但我担心的是,这种方法会有什么影响吗?
因为这将在一个线程池上运行,该线程池是一个独立的线程,它起源于我不确定如果我们不在单个线程上运行它的后果.
我们的应用程序是wcf服务,它将并行处理1000个记录.
如果有人帮助识别可能有用的问题的业务场景.
谢谢
解决方法:
作为一般规则,只要异步操作的区域是自包含且独立的,您应该使用ConfigureAwait(false) – 并且实际上这样做对于减少开销和瓶颈非常重要.库代码通常不需要知道调用上下文.但是,使用代码(例如winforms,MVC等)通常需要返回到适当的上下文,因此不应使用ConfigureAwait(false).例如:
async Task SomeUXCodeAsync() {
var data = await GetSomeDataAsync(); // note no ConfigureAwait(false)
// not shown: use "data"
}
async Task<Foo> GetSomeDataAsync() {
using(var conn = CreateConnection()) {
await conn.OpenAsync().ConfigureAwait(false);
...
int result = await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
...
return ...
}
}
上面的场景非常典型和常见,但它比这更复杂 – 例如,评论中的TransactionScope示例涉及数据相关代码可能需要了解调用上下文的示例.但细微差别:只要消费代码记住不要忽略呼叫上下文,你通常会回到正确的位置.对不起,这有点模糊和毛茸茸,但是:遗憾的是,这种情况通常适用于呼叫环境.
内容总结
以上是互联网集市为您收集整理的c# – 使用ADO.Net SQLConnection对象的ConfigureAwait(false)全部内容,希望文章能够帮你解决c# – 使用ADO.Net SQLConnection对象的ConfigureAwait(false)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。