C# SendAsync不会每次都回复所有请求
从下面的代码来看,有时它不会回复所有的ping请求,并且会等待无限长的时间。是否存在死锁问题?如果是,如何处理?如何在没有死锁的情况下为每个ip获得正确的结果C# SendAsync不会每次都回复所有请求,c#,multithreading,thread-safety,C#,Multithreading,Thread Safety,从下面的代码来看,有时它不会回复所有的ping请求,并且会等待无限长的时间。是否存在死锁问题?如果是,如何处理?如何在没有死锁的情况下为每个ip获得正确的结果 class Program { static Semaphore PingSender { get; set; } static object lockObj = new object(); static void Main(string[] args)
class Program
{
static Semaphore PingSender { get; set; }
static object lockObj = new object();
static void Main(string[] args)
{
long pingSent = 0;
long pingReceived = 0;
PingSender = new Semaphore(10000, 10000);
for (int dotNoDot = 1; dotNoDot <= 255; dotNoDot++)
{
for (int dotNo = 1; dotNo <= 255; dotNo++)
{
try
{
string ipAddress = string.Format("111.222.{0}.{1}", dotNoDot, dotNo); //Please change necessary ip base
PingSender.WaitOne();
Ping ping = new Ping();
ping.PingCompleted += (sender, eventArgs) =>
{
//lock (lockObj)
//{
PingSender.Release(1);
Console.WriteLine(string.Format("{0}) Address: {1} and Status: {2}", pingReceived, eventArgs.UserState, eventArgs.Reply.Status));
if (eventArgs.Reply.Status == IPStatus.Success)
{
//collect online machines
}
Interlocked.Increment(ref pingReceived);
if (pingReceived == pingSent)
{
//done
}
//}
};
//lock (lockObj)
//{
pingSent++;
// }
ping.SendAsync(ipAddress, 10000, ipAddress);
}
catch (Exception ex)
{
}
}
}
}
}
类程序
{
静态信号量PingSender{get;set;}
静态对象lockObj=新对象();
静态void Main(字符串[]参数)
{
long-pingSent=0;
长时间=0;
PingSender=新信号量(10000,10000);
对于(int dotNoDot=1;dotNoDot为什么要同时使用两个不同的锁定前置词?(信号量
和锁定
)?Yuval,我对一些代码进行了注释。请检查