C# 异步WCF调用以保存线程?
在中,有人建议我发送异步网络请求,而不是在后台线程上发送同步请求。原因是我不会浪费一根线。我想知道这是怎么回事 这是最初的方法。我能理解这里怎么有两条线。一个是主线程(1),一个是进行WCF调用的后台线程(Task.Run)(2): 这是我对建议方法的概述。我试图了解线程是如何保存的。在异步WCF调用之后,不会为来自异步WCF调用的回调创建另一个线程吗C# 异步WCF调用以保存线程?,c#,wpf,wcf,asynchronous,async-await,C#,Wpf,Wcf,Asynchronous,Async Await,在中,有人建议我发送异步网络请求,而不是在后台线程上发送同步请求。原因是我不会浪费一根线。我想知道这是怎么回事 这是最初的方法。我能理解这里怎么有两条线。一个是主线程(1),一个是进行WCF调用的后台线程(Task.Run)(2): 这是我对建议方法的概述。我试图了解线程是如何保存的。在异步WCF调用之后,不会为来自异步WCF调用的回调创建另一个线程吗 进一步考虑后,如果不需要回调处理,可能只使用一个线程?在WPF客户端中,您的客户端中可能有一个OnClick,检查客户端是否被单击的线程在哪
进一步考虑后,如果不需要回调处理,可能只使用一个线程?在WPF客户端中,您的客户端中可能有一个
OnClick
,检查客户端是否被单击的线程在哪里
操作系统本身的答案是检查点击,然后将消息传递给消息泵,消息泵反过来调用您的函数。WCF函数的回调是这样的,操作系统本身正在侦听回复消息,当收到回复消息时,它将发送一个信号,该信号将在线程池中找到一个空闲线程,并在此时执行回调
同步持有线程和让回调方法在最后生成线程之间的主要区别在于线程池是一个池。当线程池中的线程完成其工作时,它不会被销毁,它会等待一段时间,以查看是否还有更多的工作要做,并且它将被重用以执行新的工作
所以这两个选择是
- 让1个线程坐在那里等待,不做其他工作,等待函数解除阻止(同步+线程)
- 重用已经完成工作的现有线程(或者如果没有线程在等待,则生成一个新线程,我们在下面),当操作系统告诉我们等待的信息出现时,给它一个处理回调的短任务,然后让线程返回池中,以便在其他回调进入时为它们执行其他工作