Итак, я в основном пытаюсь сделать так, чтобы я мог запускать несколько задач, каждая из которых имеет свой собственный DbContext, чтобы они не вызывали исключения. Таким образом, в основном, как работает async-обработчики ASP.NET. Прямо сейчас я сделать что-то к эффектуМножественная структура сущности DbContext по-прежнему приводит к параллельному исключению
// set up the unity container
// WON'T WORK the dbUnitOfWork will used in two tasks.
container.RegisterType<Framework.Data.IDbUnitOfWork, Framework.Data.EntityFramework.DbUnitOfWork>(Core.IoC.Lifetime.PerThread);
container.RegisterFactory<System.Data.Entity.DbContext, ContextFactory>(o => o.Create, Framework.Core.IoC.Lifetime.Transient);
AsyncContext.Run(() => app.Run());
// run the following code fragment with an Async Context from Nito
workers.AddRange(container.resolveAll<IWorker>());
foreach (var worker in workers) {
tasks.add(worker.WorkAsync());
}
Tasks.WhenAll(tasks);
, но случается, что каждый раз, когда я получаю этот проклятый «NotSupportedException» из-за вторую операцию начался в том же DbContext. Я попытался сделать свой DbContext PerThread в Unity, но это все еще не работает. То, как я вытащил из каждого потока (ну, надеясь, по крайней мере) является
Tasks.Run(() => worker.WorkAsync());
Я просто хочу, чтобы иметь возможность запускать группу задач каждый со своим собственным DbContext. Чтобы они могли асинхронно выполнять независимые операции с базой данных. Итак, как мне добиться этого желаемого поведения.
Что такое IWorker и что он делает в WorkAsync? – DixonD
IWorker имеет 1 метод WorkAsync, который возвращает задачу. – Buttink
Как вы добавляете IDbUnitOfWork в реализацию IWorker? Было бы проще, если бы вы просто указали нам код – DixonD