在MSDN中,Thread.Abort()方法的描述说:"调用此方法通常会终止线程."
为什么不总是?
在哪些情况下它不会终止线程?
有没有其他可能终止线程?
我主要关心的是布尔标志......没有任何同步就可以安全地使用它吗?我在几个地方读到它是原子的(包括文档).
class MyTask
{
private ManualResetEvent startSignal;
private CountDownLatch latch;
private bool running;
MyTask(CountDownLatch latch)
{
running = false;
this.latch = latch;
startSignal = new ManualResetEvent(false);
}
// A method which runs in a thread
public void Run()
{
startSignal.WaitOne();
while(running)
{
startSignal.WaitOne();
//... some code
}
latch.Signal();
}
public void Stop()
{
running = false;
startSignal.Set();
}
public void Start()
{
running = true;
startSignal.Set();
}
public void Pause()
{
startSignal.Reset();
}
public void Resume()
{
startSignal.Set();
}
} …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
//Await #1
var response1 = await doSomething();
if(response1.isSuccess) {
//Await #2
var response2 = await doSomethingElse();
}
Run Code Online (Sandbox Code Playgroud)
响应 1 和响应 2 是完全独立的,我想在这里并行化等待任务。基本上响应 2 需要很多时间,因此只有在响应 1 成功时才会调用。有什么方法可以调用这两个任务并查看响应 1 的结果,如果失败,我删除/跳过 Await#2 的响应。