C#线程:在上下文中的不同线程上调用函数并返回结果

C#线程:在上下文中的不同线程上调用函数并返回结果,c#,multithreading,zeromq,C#,Multithreading,Zeromq,这可能是一个非常天真的问题: 我正在尝试创建一个客户端应用程序,它使用ZeroMQ与多个服务器通信。客户机希望向这些服务器发送大量请求并获得响应(所以req rep模式) 我面临的问题是ZeroMQ套接字应该只在创建它们的线程中使用 一种方法是调用新任务中的每个请求:在任务内部,创建连接,发送请求并获取响应。但是,连接设置非常昂贵 第二种方法可能是将连接打开到不同线程中的服务器;然后在与线程相同的上下文中调用发送例程并获得结果。在C#中是否有方法从线程Y调用线程X上的函数,但在线程X的上下文中执

这可能是一个非常天真的问题:

我正在尝试创建一个客户端应用程序,它使用ZeroMQ与多个服务器通信。客户机希望向这些服务器发送大量请求并获得响应(所以req rep模式)

我面临的问题是ZeroMQ套接字应该只在创建它们的线程中使用

一种方法是调用新任务中的每个请求:在任务内部,创建连接,发送请求并获取响应。但是,连接设置非常昂贵

第二种方法可能是将连接打开到不同线程中的服务器;然后在与线程相同的上下文中调用发送例程并获得结果。在C#中是否有方法从线程Y调用线程X上的函数,但在线程X的上下文中执行该函数,然后获取返回值


我知道这可能是一个糟糕的方法。在没有太多开销的情况下实现我想要的东西的最佳方法是什么?

处理此类场景的典型方法是设置一个。这个类正是针对这种类型的场景而设计的,尽管最常见的示例是围绕UI线程的

您可以使用异步将“消息”发布到上下文(线程),该上下文(线程)将在完成后接收回调。TPL可以简化这一点,它特别允许您从
SynchronizationContext
创建
TaskScheduler
,从而允许您将
任务
安排在自定义上下文上运行

使用C#5,这将变得非常有用,因为您可以使用
async
/
wait
来同步您的调用,并将工作推送到/从这些“线程”推送


有关实现示例,请参阅中的。

谢谢!我将研究使用SynchronizationContext。