具有阻塞调用的 WCF WebMethod

WCF WebMethod with a blocking call

我对 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 等待/异步模型是实现此任务的正确方法吗? .在我研究之前,我随机将关键字 async 附加到 long 运行 方法,但它没有用。

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

async doLongRun()
{

}

所以我打算好好研究 await/async 模型,但想知道我是否在朝着正确的方向前进?

谢谢

我认为你不需要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
    }
}