jer*_*who 2 c# wcf asynchronous task-parallel-library async-await
我们有一个WCF服务,它以下列方式处理传入的消息:
public bool ProcessMessage(string message)
{
var returnValue = GetReturnValue();
Task.Run(() => {
//do some things with the message
UpdateDatabase();
SendRepliesOverNetwork();
});
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
为了尽可能多地处理消息,我们在此处添加了任务.我们希望尽快将returnValue返回给调用者,让Task完成它的工作.
我的问题:使用等待的异步数据库调用和/或使用异步方法进行网络回复是否有任何好处?
我很谨慎,因为我认为这可能会造成太多的上下文切换.我们已经看到该应用在负载下使用了100多个线程.
首先,我建议你退后一步,真的问早点回来是个好主意.你在做什么通常是危险的; 在进行实际处理之前,您将"OK"返回给客户端.如果您的客户知道"returnValue"并不意味着操作已完成并且仅在收到"SendReplies"时认为它已完成,那么这只是一个好主意.
那就是说,是的,你应该看到一些好处,你可以做一切异步.如果您的所有任务都是非阻塞的,那么您将更好地利用线程池(减少上下文切换).
public bool ProcessMessage(string message)
{
var returnValue = GetReturnValue();
Task.Run(async () => {
//do some things with the message
await UpdateDatabaseAsync();
await SendRepliesOverNetworkAsync();
});
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3691 次 |
| 最近记录: |