我有一个WCF服务,充当应用程序之间的中间件:当WCF从多个客户端(例如,系统A)接收多个调用。每个呼叫都会调用另一个系统(例如,系统B)。
是否可以每次都进行一次对系统B的调用?而不是对呼叫进行反对分析?
答案 0 :(得分:3)
如果系统B不关心它被调用哪个线程,但你只是想确保多个线程不同时调用它(也许是因为你知道系统B依赖于全局变量或全局状态),您可以使用简单的互斥锁使所有线程排成一行并通过系统B单个文件。像这样:
public class MyClass
{
private static object _lockObj = new Object();
public void MyFunction()
{
lock(_lockObj)
{
system_B_call(etc);
}
}
}
重要提示:您要“限制”的所有功能必须使用相同的锁定对象实例。
如果您的系统B对其所调用的线程敏感(许多UI框架,包括WinForms和WCF需要在主UI线程上进行UI更改),那么您需要将调用编组到特定线程上。有几种方法可以做到这一点,其中一种方法是使用SynchronizationContext及其Post或Send方法。