我读过 await/async 不应该创建/使用新线程,但编译器在幕后创建了一个 astate 机器......所以我尝试了这个,并且每次调用 F1 都使用来自 ThreadPool 的线程。
class Program
{
static System.Threading.SemaphoreSlim sem =
new System.Threading.SemaphoreSlim(20, 20);
static async void F1()
{
await sem.WaitAsync();
await sem.WaitAsync();
await Task.Delay(6000);
var threadId = GetCurrentThreadId();
sem.Release();
sem.Release();
}
static void Main(string[] args)
{
var threadId = GetCurrentThreadId();
F1();
F1();
F1();
F1();
F1();
F1();
F1();
F1();
Task.Delay(30000).Wait();
}
[DllImport("kernel32.dll")]
static extern uint GetCurrentThreadId();
}
斯蒂芬大帝
相关分类