【发布时间】:2013-11-12 13:28:31
【问题描述】:
Given 是一个非常常见的线程场景:
声明
private Thread _thread;
private bool _isRunning = false;
开始
_thread = new Thread(() => NeverEndingProc());
thread.Start();
方法
private void NeverEndingProc() {
while(_isRunning) {
do();
}
}
可能用于异步 tcp 侦听器,该侦听器等待回调,直到通过让线程耗尽而停止 (_isRunning = false)。
现在我想知道:是否可以用Task 做同样的事情?使用CancellationToken?还是Tasks 仅适用于预期结束并报告状态的程序?
【问题讨论】:
-
您只想使用任务创建一个带有取消选项的无限循环?
-
@Deffiss 基本上,是的。我曾经被告知是“只是”线程,但在更高的层次上,它们的行为略有不同,但目的相同。不过,我可能错了。
-
我认为
_isRunning必须是volatile。否则,编译器可能会意识到它不是从当前线程修改的,并且在循环开始之前只检查一次。
标签: c# multithreading asynchronous task-parallel-library