ping 할 수있는 호스트 이름을 가진 datatable 참조를 전달할 때 각 호스트에 ping을 시도한 다음 해당 열과 행의 값을 변경하려고하는 메소드를 작성하려고합니다. 핑 성공에.Parallel.ForEach 루프에서 참조 된 데이터 테이블을 변경하십시오.
그러나 Parallel.ForEach 메서드에서 참조를 사용할 수 없습니다. 이 일을 할 수있는 방법이 있습니까? - 따라서 액세스가 동기화되어 있어야합니다
public void checkON(ref DataTable PCS)
{
Parallel.ForEach(PCS.AsEnumerable(), pc =>
{
string loopIp = pc["Name"].ToString();
if (PingIP(loopIp))
{
DataRow[] currentpc = PCS.Select("Name = '{0}'", loopIp);
currentpc[0]["Online"] = "ON";
}
else
{
DataRow[] currentpc = PCS.Select("Name = '{0}'", loopIp);
currentpc[0]["Online"] = "OFF";
}
}
);}
그럼 왜'ref'가 필요한가요? 당신의 코드에서 나는 이유를 볼 수 없습니다. 게다가'DataTable'은 쓰레드에 안전합니까? (IMO하지만 ... 우리는 확실합니까?) –
@Adriano 전 꽤 * 확신하지 못합니다 *; p –