C# 程序在后台处理

C# program processes in background

我目前正在编写自己的套接字服务器(作为控制台应用程序),由于我是 C# 中多线程的新手,我开始想知道线程和后台任务。我找到了线程的一些可能替代品,例如 (BackgroundWorker,但对于 UI) 或 Task...

我目前已经编写了一个进程,它周期性地在无休止的 while 循环中运行,检查客户端是否仍然连接。

因为我无法从 google 上搜索得到意见,所以我想问一下,运行 是否在后台处理,比如我的客户端检查,通过 Thread 和无限循环一个正确的方法,或者有一些更好的方法如何去做?

如果您定期做事,那么 Timer 比较合适。请注意,有 several alternatives 具有不同的行为。这样做的动机是定时器会周期性地对 运行 事物进行设置,因此在阅读代码时意图会变得很明显。

如果您正在处理来自其他线程的项目,Threadblocking collection 上循环是合适的。如果处理需要有序或单线程,这对我很有用。这将为线程锁定一些资源,因此应谨慎使用。

如果您想 运行 在后台执行一些一次性的进程密集型任务,那么 Task 是最合适的。这将使用线程池中的线程,并在完成后 return 线程。如果您想同时 运行 不同的事情,这也很有用。

如果需要等待一些IO操作,比如磁盘或者网络,tasks+async/await比较合适。这在等待时根本不会使用任何线程。

如果运行并行执行一些进程密集型工作,那么Parallel.For/Foreach是合适的。

我可能不会使用 BackgroundWorker。这是在 windows 表单时代制作的,大部分被任务取代。