繁体   English   中英

异步WCF调用以保存线程?

[英]Async WCF call to save thread?

另一个SO问题中 ,建议我发送异步网络请求,而不是在后台线程上发送同步请求。 原因是我不浪费线程。 我试图了解这是怎么回事。

这是原始方法。 我可以理解这里有两个线程。 一个是主线程(1),一个是后台线程(Task.Run)(2),该线程进行WCF调用:

在此处输入图片说明

这是我建议的方法的草图。 我试图了解如何保存线程。 异步WCF调用之后,是否将为异步WCF调用的回调创建另一个线程?

在此处输入图片说明

进一步考虑之后,如果不需要回调处理,也许仅使用一个线程?

在WPF客户端中,您的客户端中某处可能有一个OnClick ,用于检查客户端是否被单击的线程在哪里?

操作系统本身的答案是检查是否单击,然后将消息传递到消息泵,消息泵依次调用您的功能。 WCF函数的回调就是这样,操作系统本身正在侦听答复消息,当它收到消息时,它将发送一个信号,该信号将在线程池中找到一个空闲线程并在那时执行回调。

同步保持线程与让回调方法最后生成线程之间的主要区别在于,线程池是一个池 当线程池中的线程完成其工作时,它不会被销毁,它会等待一会儿,以查看是否有更多工作可以完成, 并且可以重复使用它来进行新工作。

所以这两个选择是

  • 有1个线程坐在那里,等待其他任何等待该功能解除阻塞的工作(同步+线程)
  • 当OS告诉我们显示了我们在哪里等待的信息时,请重用一个已经完成工作的现有线程(如果没有正在等待的线程,或者在ThreadPool.GetMaxThreads()以下,则产生一个新ThreadPool.GetMaxThreads() ,以完成简短的任务处理回调,然后让线程回到池中为其他回调做其他工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM