inversionhourglass / Rougamo.DI

Rougamo dependency injection extension packages. Currently it supports Microsoft Dependency Injection and Autofac.
MIT License
7 stars 2 forks source link

异步并行任务获取到错误的scope #2

Closed inversionhourglass closed 1 month ago

inversionhourglass commented 1 month ago
using (var outerScope = serviceProvider.CreateScope())
{
    var locker1 = new EventWaitHandle(false, EventResetMode.ManualReset);
    var locker2 = new EventWaitHandle(false, EventResetMode.ManualReset);
    var t1 = Task.Run(() =>
    {
        // 等待并行线程t2先完成pScope的创建
        locker1.WaitOne();
        // 此时已pScope已完成创建,这里的scope理论应该是outerScope,但实际上是pScope
        locker2.Set();
    });
    var t2 = Task.Run(() =>
    {
        using (var pScope = outerScope.ServiceProvider.CreateScope())
        {
            // 通知t1,已完成pScope创建
            locker1.Set();
            locker2.WaitOne();
        }
    });
    await Task.WhenAll(t1, t2);
}