【问题标题】:Question regarding appropriate use for Task in C#关于在 C# 中适当使用 Task 的问题
【发布时间】:2011-03-10 20:42:26
【问题描述】:

我有一个关于任务的问题。我有一个 WCF 应用程序,它有一个 ReceiveEmpInfo 方法,将从客户端应用程序调用。

WCF 服务器应用:

public void ReceiveEmpInfo(string EmpName, string EmpId)
{
    DifferentClass.SaveEmpToDB(string EmpName, string EmpId);
    return;
}

我的要求是我想在调用SaveEmpToDB()方法后返回这个方法调用(ReceiveEmpInfo()),我不想在SaveEmpToDB()方法将数据保存到数据库之前保持客户端调用。我正在考虑使用 Task,但我不确定它是否能解决我的需求。

请给我你的建议。

谢谢, 乔

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    是的,它会的。一旦您调用Task.Start(),您的 WCF 方法就可以返回并且任务将在“后台”中运行。您必须非常小心,尤其是当您在 IIS 中运行此 WCF 服务时。如果这些任务运行时间很长,并且 IIS 应用程序池关闭(或重新启动),您的任务将在其工作过程中[可能]受到打击。

    顺便说一句:我假设您指的是:System.Threading.Tasks.Task

    【讨论】:

      【解决方案2】:

      使用回调,对 db 或其他东西进行异步调用, 见例子http://msdn.microsoft.com/en-us/library/ca56w9se.aspx

      【讨论】:

        【解决方案3】:

        这很像这篇文章:

        How to make a call to my WCF service asynchronous?

        我认为流行答案中的链接应该会有所帮助。

        【讨论】:

          【解决方案4】:

          如果这是一种单向的即发即弃操作,您可以简单地进行操作one-way。这不会在方法执行期间阻塞客户端。

          [ServiceContract]
          interface ISomeContract
          {
             [OperationContract(IsOneWay = true)]
             void ReceiveEmpInfo(string EmpName, string EmpId)
          }
          

          【讨论】:

          • 如果我的服务是单一的(InstanceContextMode = Single)IsOneWay 将如何工作?
          • @user654261 我认为这不会导致任何问题。我刚刚创建了一个原型,它运行良好。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-05
          • 1970-01-01
          • 2011-02-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多