使用任务与线程,尤其是在长时间运行的进程中

时间:2017-01-09 05:34:58

标签: c# multithreading

使用各种方法凝视和管理另一个线程上的工作可能是一个难以做出的决定。我已经尝试了几种方法,但尚未做出最佳决定。

示例,运行SSL TCP服务器,假设代码类似于MS示例:https://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx

使用代码在线程上运行服务器会产生很多问题:

ThreadPool.QueueUserWorkItem((s) => RunSSLTCPServer(Machine01, 8080));

测试表明,线程迟早会遇到不稳定,可能是因为有限的线程池,以及许多阻塞呼叫。

那么,在另一个线程下启动服务器的最佳方法是什么?

ThreadStart StartOptions = new ThreadStart(RunSSLTCPServer);
SSLTCPThread = new Thread(StartOptions);
SSLTCPThread .Start(Machine01, 8080);

SSLTCPThread = new Thread(() => RunSSLTCPServer(Machine01, 8080));
SSLTCPThread.Start();

为什么选择将其作为任务启动呢?

Task SSLTCPTask = Task.Run( () => { RunSSLTCPServer(Machine01, 8080) }, TaskCreationOptions.LongRunning );

什么是最佳实践,最可靠的是什么?我特别关注正在完成的工作的可靠性,而不是对任务和线程之间差异的解释。

0 个答案:

没有答案