带阻止调用的WCF WebMethod

时间:2015-05-26 11:34:27

标签: c# wcf async-await

我对WCF范例相对较新,并且手头有一项简单的任务。

我有这样的网络方法。

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/GetUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
User GetUserById(User user);

我已按以下方式实施此方法

public GetUserById(User user)
{ 
     //abc 
     // a long running task 
     return user;
}

我有一个任务,我应该在此方法中的某个条件下执行,其结果对当前请求没有影响。因此,用户应该等待这个长时间运行的任务完成,以便他们获得结果。

我应该研究什么? 。 .net await / async模型是否是实现此任务的正确方法? 。在我研究之前,我将关键字async随机附加到长时间运行的方法,但它不起作用。

public GetUserById(User user)
{ 
   //abc 
   // a long running task 
   doLongRun();
   return user;
}

async doLongRun()
{

}

那么我计划正确研究await / async模型,但想知道我是否正朝着正确的方向前进?

由于

1 个答案:

答案 0 :(得分:1)

我认为你不需要async因为你没有等待结果。您的方法是CPU绑定的,如果您想在线程池上执行它,可以使用Task.Run将其推送到后台,如果需要专用线程,则可以Task.Factory.StartNew( () => /*..*/, TaskCreationOptions.LongRunning)

public GetUserById(User user)
{ 
   //abc 
   // a long running task 
   Task.Run(()=> doLongRun());
   return user;
}


public void doLongRun()
{
    try
    {
    }
    catch(Exception e)
    {
        // handle error
    }
}