C#DLL-来自汇编的多个类对象



i有一个汇编(server.dll),该汇编接收输入字符串并返回附加的字符串。

我以这种方式使用dll:

    using ServerDll;
    ServerDll.Server ob = new ServerDll.Server();
    for ( int i = 0 ; i<10; i++ )
    {
        Console.WriteLine(   ob.GiveAppendedString("Hello")    );
    }

现在,我在许多异步线程中使用此组件。因此,在每个线程中,我使用上面的代码。

在不同的线程中,我能够创建服务器对象,但是,我注意到一次只能在循环中使用函数giveAppendedString()。没有两个线程能够在其各自的循环中同时使用DLL暴露的方法。

如何从所有线程中实现对函数giveAppendedString()的多线程和并发调用?

我应该使用任何多线程公寓模型吗?如果是,我应该在这个领域的新手时应采取任何韦伯链接。

谢谢。

[ update ]简化的问题:可以通过多个线程(来自引用汇编的应用程序)调用汇编的函数吗?如果是,如何?

该情况完全取决于GiveAppendedString()的实现。如果用锁实现该函数,则该功能是为实例同步运行(或不同时运行)。

对于其他情况,您可以使用任何异步技术来执行并发呼叫。根据您的代码,我提供了一个示例,用于在此处进行并发电话

  Parallel.For(0, 10,
                    i =>
                    {
                        Console.WriteLine(ob.GiveAppendedString("Hello"));
                    });

编辑:要回答您更新的,简化的问题:。您需要以线程安全方式编写功能。这通常是一项非琐碎的任务,您需要确保giveappendedString调用的所有代码均为螺纹保护或放置在锁定范围中。

这就是锁定的目的。将呼叫包装在lock() {...}范围中,例如

    ServerDll.Server ob = new ServerDll.Server();
    for ( int i = 0 ; i<10; i++ )
    {
        string appendedString;
        lock(ob)
        {
            ob.GiveAppendedString("Hello");
        }
        Console.WriteLine(appendedString);
    }

或者,如果可能的话,请使GiveAppendedString线程安全。

最新更新