using System;using System.Net.Sockets;using System.Collections.Concurrent;using System.Threading;using System.Threading.Tasks;using System.Collections.Generic; public class PScan{ public static List Scan(string host,int from,int to,int conc,int timeoutMs){ var open=new ConcurrentBag(); var sem=new SemaphoreSlim(conc); var tasks=new List(); for(int p=from;p<=to;p++){ int port=p; sem.Wait(); tasks.Add(Task.Run(async ()=>{ try{ using(var c=new TcpClient()){ var t=c.ConnectAsync(host,port); var done=await Task.WhenAny(t,Task.Delay(timeoutMs)); if(done==t&&c.Connected){ open.Add(port); } } } catch{} finally{ sem.Release(); } })); } Task.WaitAll(tasks.ToArray()); var l=new List(open); l.Sort(); return l; } }