C# WCF服务:调用第一个函数,从中返回,然后调用第二个函数在后台工作
我正在编写一个WCF服务,其中我必须调用两个函数来更新数据库,但我希望在第一次表更新之后返回,这样客户机就不会等待更长的时间,然后第二个表将在后台更新 我想做的事情是这样的:C# WCF服务:调用第一个函数,从中返回,然后调用第二个函数在后台工作,c#,database,wcf,synchronous,C#,Database,Wcf,Synchronous,我正在编写一个WCF服务,其中我必须调用两个函数来更新数据库,但我希望在第一次表更新之后返回,这样客户机就不会等待更长的时间,然后第二个表将在后台更新 我想做的事情是这样的: public bool myMainFunction(){ bool result = updateTable1(); return result; updateTable2(); } 我怎样才能做到这一点 谢谢你试试这个 using System.Threading.Tasks; pu
public bool myMainFunction(){
bool result = updateTable1();
return result;
updateTable2();
}
我怎样才能做到这一点
谢谢你试试这个
using System.Threading.Tasks;
public bool MyMainFunction()
{
bool result = UpdateTable1();
Task.Run(() => UpdateTable2());
return result;
}
任务运行(操作操作)发件人: 对要在线程池上运行的指定工作进行排队,并返回表示该工作的任务对象 基本上,Task.Run在线程池中对您的项目进行排队,这允许它异步运行。通常,您会将其与任务的等待或结果方法配对,以阻止调用线程,直到任务完成为止-例如:
using System.Threading.Tasks;
public bool MyMainFunction()
{
Task<bool> task = Task.Run(() => UpdateTable1());
Task.Run(() => UpdateTable2());
return task.Result;
}
使用System.Threading.Tasks;
公共bool mymain函数()
{
Task=Task.Run(()=>UpdateTable1());
运行(()=>UpdateTable2());
返回任务。结果;
}
在前面的示例中,这两个方法现在都在线程池中排队,这意味着它们可以并行执行。(在第一个示例中,UpdateTable1必须在UpdateTable2开始之前完成,但是我们启动了UpdateTable2,并且忘记了它,所以这是无关紧要的)。新示例现在允许UpdateTable2在UpdateTable1完成之前开始执行。然而,我们现在有一个问题,因为我们需要等待UpdateTable1的结果返回所需的bool值
当您调用,task.Wait()或task.Result时,您的方法基本上会暂停,直到任务完成—在本例中,它会等到表1更新
现在-您会注意到我们没有一个变量来存储UpdateTable2任务的状态-这是因为您不关心结果。因为没有存储任何变量,所以我们不会阻止调用线程来查看结果——这意味着您实际上得到了一个“Fire-and-Forget”方法
希望这有助于澄清一点——但如果没有足够的资源提供帮助,请研究异步和并行编程,因为会有人比我解释得更清楚
以下内容对我很有用:我还将您的方法名称从Camel Case转换为Pascal Case,因为这是标准做法。非常感谢。向你致敬!