为什么当一个任务等待另一个任务时,当前线程会发生改变?

14 浏览
0 Comments

为什么当一个任务等待另一个任务时,当前线程会发生改变?

给定以下代码:

public static async Task TestTask()
{
    Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
    await Task.Delay(1000);
    Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
}

我们可以看到,在await之后,当前线程发生了变化。然而,这段代码并不是多线程的,而是为了提供非阻塞的IO(参考JavaScript的机制)。但为什么会发生这种情况?既然发生了,那么是否意味着在awaited行之后的任何内容都必须考虑线程安全性(例如添加到HashSet),而在awaited行之前则不需要考虑?

0