具有阻塞调用的 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
}
}
我对 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
}
}