Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务:调用第一个函数,从中返回,然后调用第二个函数在后台工作_C#_Database_Wcf_Synchronous - Fatal编程技术网

C# 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

我正在编写一个WCF服务,其中我必须调用两个函数来更新数据库,但我希望在第一次表更新之后返回,这样客户机就不会等待更长的时间,然后第二个表将在后台更新

我想做的事情是这样的:

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,因为这是标准做法。

非常感谢。向你致敬!