不能说dll中的函数都不能被并行调用。但是如果dll本身使用了全局变量,并且没有做同步,肯定是不行的,你的dll就是这个情况。
那么你需要自己同步,也就是保证始终只有一个线程在调用:
object lockobj = new object();
Parallel.For(0, _dtpost.Rows.Count, (i) =>
{
string ip = _dtpost.Rows[i][2].ToString();
newka newkas = new newka(ip, 3000, 1);
lock (lockobj)
{
PingTask(_dtpost.Rows[i], newkas);
}
Thread.Sleep(300);
});