我对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模型,但想知道我是否正朝着正确的方向前进?
由于
答案 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
}
}