为什么当一个任务等待另一个任务时,当前线程会发生改变?
- 论坛
- 为什么当一个任务等待另一个任务时,当前线程会发生改变?
14 浏览
为什么当一个任务等待另一个任务时,当前线程会发生改变?
给定以下代码:
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
行之前则不需要考虑?