好记性不如烂笔头。

C#多线程使用Semaphore信号量控制线程数

private static Semaphore semaphore;
void CreateOrder(IEnumerable list)
{
    if (semaphore==null) semaphore = new Semaphore(20, 30);

    foreach (var item in list)
    {
        semaphore.WaitOne();
        try
        {
                Action action = () =>
                {
                    //具体业务逻辑

                    //释放信号量必须放在具体的action里面
                    semaphore.Release();
                };
                action.BeginInvoke(null, null);
        }
        catch (Exception e)
        {
            //
        }
    }
}