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
线程安全。