0
我正在做一些套接字編程,最終將進入一個Windows服務。爲了測試目的,我使用控制檯應用程序。我有點困惑,因爲BeginAcceptTcpClient或Task.WaitAll不會等待,控制檯應用程序剛剛結束。如果我在主結尾處添加Console.ReadLine,則一切正常。在Main中進行一些細微修改時,它也可以在我作爲服務運行時起作用。爲什麼沒有Task.WaitAll等待,直到控制檯應用程序中的所有任務都完成了,爲什麼BeginAcceptTcpClient暫停並等待控制檯中的連接,但是當我在服務中運行它時完美工作。BeginAcceptTcpClient不等待
static void Main(string[] args)
{
listener = new TcpListener(IP_ADDRESS, Port);
listener.Start();
var tasks = new List<Task>();
Task task = Task.Factory.StartNew(() => AcceptClient(listener),TaskCreationOptions.LongRunning);
tasks.Add(task);
Task.WaitAll(tasks.ToArray());
}
private static void AcceptClient(TcpListener tcpListener)
{
Task<TcpClient> acceptTcpClientTask = Task.Factory.FromAsync<TcpClient>(tcpListener.BeginAcceptTcpClient, tcpListener.EndAcceptTcpClient, tcpListener);
acceptTcpClientTask.ContinueWith(task => { OnAcceptConnection(task.Result); AcceptClient(tcpListener); }, TaskContinuationOptions.OnlyOnRanToCompletion);
}