C# 关于WCF中的异步
我正在开发一个只接受HTTP的WCF RESTful web服务。关于更改为异步模式,我没有什么问题C# 关于WCF中的异步,c#,.net,web-services,wcf,asynchronous,C#,.net,Web Services,Wcf,Asynchronous,我正在开发一个只接受HTTP的WCF RESTful web服务。关于更改为异步模式,我没有什么问题 几乎所有演示如何使用TPL实现异步WCF操作契约的示例都使用基于WCF客户端代理的客户端,在我的示例中,客户端可能是只支持HTTP谓词的浏览器,因此将我的WCF服务更改为异步模式似乎意义不大。我可以说,如果一个服务是RESTful的,并且处理每个请求不需要很长时间,那么将服务同步更改为异步将不会给我带来很多好处吗 如果我的服务操作契约是单向服务或不向客户端返回任何内容,则操作契约应定义为异步任务
异步任务DoSthAsync()
或无效DoSth()
?这里有什么区别?换句话说,我应该等待/返回任务。运行还是不运行Task.Run(()=>{})
delegate中不处理传入流对象@我对客户没有任何假设。这里我完全关注服务器端 2.如果我的服务操作契约是单向服务或不向客户端返回任何内容,则操作契约应定义为异步任务DoSthAsync()或void DoSth()?这里有什么区别?换句话说,我应该等待/返回任务。运行还是不运行 您没有在服务合同中指定服务是否异步。这是您服务的内部内容。无论您的服务是否异步执行操作,客户端仍然可以同步或异步调用您的服务。例如,如果您的服务将内容写入一个文件,并且写入需要5分钟,并且您已经实现了同步,那么客户端仍然可以异步(或同步)调用您的服务。如果已异步实现此功能,则处理该调用的线程池线程将可以自由处理其他调用。换句话说,这些更改只会影响服务器端 还请记住,如果您正在做的事情是真正异步的,那么异步进行将是有益的。如果您正在执行CPU密集型操作,那么异步操作实际上会影响性能。为什么?因为当一个请求到达ASP.NET(WCF、MVC、Web表单或其他)时,处理该请求的最有效方法是使用一个线程池线程。如果您正在执行CPU密集型操作,那么无论是该线程执行该操作,还是启动
任务
并由另一个线程接管,都不会有什么不同。但是,您将为切换上下文付出代价
3.我的服务接受使用HTTP POST从客户端发送的大块数据,假设处理需要一段时间,因此更改为异步模式可以提高服务并发性和吞吐量,如何确保传入流对象不被WCF在Task.Run(()=>{})委托中处理
当请求到达WCF门时,无论是异步处理还是同步处理,除非整个操作完成,否则不会发送响应。那么,为什么要处理传入的流呢
我认为您不清楚整个异步概念。无论您的服务是异步的还是非异步的,客户端仍然需要确保调用没有阻塞。例如,如果客户端调用操作,则它们可以:
@我对客户没有任何假设。这里我完全关注服务器端 2.如果我的服务操作契约是单向服务或不向客户端返回任何内容,则操作契约应定义为异步任务DoSthAsync()或void DoSth()?这里有什么区别?换句话说,我应该等待/返回任务。运行还是不运行 您没有在服务合同中指定服务是否异步。这是您服务的内部内容。无论您的服务是否异步执行操作,客户端仍然可以同步或异步调用您的服务。例如,如果您的服务将内容写入一个文件,并且写入需要5分钟,并且您已经实现了同步,那么客户端仍然可以异步(或同步)调用您的服务。如果已异步实现此功能,则处理该调用的线程池线程将可以自由处理其他调用。换句话说,这些更改只会影响服务器端 也要记住,如果你正在做的事情是