gpt4 book ai didi

c# - 如果我运行一个需要 5 分钟才能完成的存储过程,我的代码序列会在存储过程完成之前继续吗?

转载 作者:行者123 更新时间:2023-11-30 13:32:46 24 4
gpt4 key购买 nike

如果我有一个运行存储过程的程序大约需要 5 分钟才能运行,例如:

Database.RunJob(); -- takes 5 mins to complete
MessageBox.Show("Hi");

问题 - 消息框是否会在 Database.RunJob() 完成之前显示“嗨”?

如果是,在继续下一行代码之前如何确保查询已完成?

最佳答案

信息不足,无法给出有意义的答案。

我们能给出的最佳答案是:这取决于 Database.RunJob() 是同步的还是异步的。

  • 如果 .RunJob 是同步的(即在当前线程上运行),则在 .RunJob 完成之前,MessageBox.Show 不会运行。

  • 如果它是异步的,生成其他线程来完成工作,那么MessageBosh 将在作业完成之前立即执行。

由于您没有展示 RunJob 实际做了什么,我们无法更准确地回答。


让我们假设 .RunJob 是异步的。如果那个方法的设计者是值得的,他会从那个方法返回一些东西;理想情况下 Task<T> .

如果他返回一个任务,您可以像这样编写您的 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 分钟才能完成的存储过程,我的代码序列会在存储过程完成之前继续吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11763242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com