WCF 服务:从中调用第一个函数 return,然后调用第二个函数在后台工作

WCF Service: Call first function, return from it, then call second function to work in background

我正在编写一个 WCF 服务,其中我必须调用两个函数来更新数据库,但我想在第一次 table 更新后 return,这样客户端就不会等待更长的时间,然后再等待第二次table 将在后台更新。

我想做的事情是这样的:

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(动作动作)
来自:https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx

Queues the specified work to run on the thread pool and returns a Task object that represents that work.

基本上,Task.Run 将您的项目在线程池中排队 - 这允许它 运行 异步。通常你会将它与任务的 WaitResult 方法配对以阻塞调用线程直到任务完成 - 例如:

using System.Threading.Tasks;

public bool MyMainFunction()
{
    Task<bool> task = Task.Run(() => UpdateTable1());

    Task.Run(() => UpdateTable2());

    return task.Result;
}

在前面的示例中 - 两个方法现在都在线程池中排队 - 这意味着它们可以并行执行。 (在第一个示例中 - UpdateTable1 必须在 UpdateTable2 开始之前完成 - 但我们解雇并忘记了 UpdateTable2 - 所以它是无关紧要的)。新示例现在允许 UpdateTable2 在 UpdateTable1 完成之前开始执行。但是 - 我们现在会遇到问题 - 因为我们需要等待 UpdateTable1 的结果 return 所需的 bool 值。

当您调用 task.Wait()task.Result 时,您的方法基本上会暂停,直到任务已完成 - 在本例中,它会等待 table1 更新。

现在 - 您会注意到我们没有变量来存储 UpdateTable2 的任务状态 - 这是因为您不关心结果。由于没有存储变量,我们永远不会阻止调用线程来查看结果——这意味着您实际上已经获得了一个 "Fire and Forget" 方法。

希望这有助于澄清一点——但如果没有,那里有很多资源可以提供帮助,请查看异步和并行编程,因为会有人比我解释得更清楚。

以下内容对我有用:
mcsd-certification-toolkit-exam-70-483

我还将您的方法名称从 Camel Case 转换为 Pascal Case,因为这是标准做法。