c# – 如果我运行一个需要5分钟才能完成的存储过程,我的代码序列会在存储过程完成之前继续吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如果我运行一个需要5分钟才能完成的存储过程,我的代码序列会在存储过程完成之前继续吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1194字,纯文字阅读大概需要2分钟。
内容图文
![c# – 如果我运行一个需要5分钟才能完成的存储过程,我的代码序列会在存储过程完成之前继续吗?](/upload/InfoBanner/zyjiaocheng/758/cf62f6e1964c4c98803404fab67c1671.jpg)
如果我有一个运行存储过程的程序,运行大约需要5分钟,例如:
Database.RunJob(); -- takes 5 mins to complete
MessageBox.Show("Hi");
问题 – 在Database.RunJob()完成之前,消息框是否显示“Hi”?
如果是这样,在继续下一行代码之前,如何确保查询完成?
解决方法:
信息不足,无法给出有意义的答案.
我们可以给出的最佳答案是:它取决于Database.RunJob()是同步还是异步.
>如果.RunJob是同步的(即,在当前线程上运行),那么
在.RunJob完成之前,MessageBox.Show将不会运行.
>如果它是异步的,那么产生其他线程来完成工作
MessageBosh将在作业完成之前立即执行.
由于您没有显示RunJob实际上做了什么,我们无法更准确地回答.
我们假设.RunJob是异步的.如果那个方法的设计者值得他的盐,他会从那个方法返回一些东西;理想情况下是Task
如果他返回一个Task,你可以像这样编写你的C#5代码:
async void RunJobAndShowSuccessMessage()
{
await Database.RunJob();
MessageBox.Show("Hi, the job is done!");
}
我们假设.RunJob是同步的,只在当前线程上运行.这意味着您可能不希望在UI线程上运行它;这样做会导致应用程序UI冻结5分钟.
为了避免这种情况,让我们自己在不同的线程上运行数据库作业,以便应用程序UI保持响应:
async void RunJobAndShowSuccessMessage()
{
// Spawn a task to run in the background.
await Task.Factory.Start(() => Database.RunJob());
MessageBox.Show("Hi, the job is done!");
}
内容总结
以上是互联网集市为您收集整理的c# – 如果我运行一个需要5分钟才能完成的存储过程,我的代码序列会在存储过程完成之前继续吗?全部内容,希望文章能够帮你解决c# – 如果我运行一个需要5分钟才能完成的存储过程,我的代码序列会在存储过程完成之前继续吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。