我想创建一个启动新任务的通用方法>创建我的db上下文的唯一实例(因为EF dbcontext不是线程安全的,我想并行执行多个tak)>通过ToList()
枚举结果:
这是我的伪代码,很可能无法编译。我需要你帮助改进它的正确语法:
private Task<T> DoGenericStuff<T>(T dbContext, Func<T, bool> func)
{
return Task.Factory.StartNew(() =>
{
using (var context = Activator.CreateInstance(dbContext.GetType()))
{
return context.func.ToList();
}
});
}
-
Func<SYSTEM, bool> func = x => x.SYSTEM_KEY == 123;
var task = DoGenericStuff(DbContext, func);
答案 0 :(得分:1)
private Task<TResult> DoGenericStuff<TDbContext, TResult>(Func<TDbContext, TResult> func) where TDbContext : DbContext, new()
{
return Task.Factory.StartNew(() =>
{
using (var context = new TDbContext())
{
return func(context);
}
});
}
执行使用:
var task = DoGenericStuff<MyDbContext, bool>(context => context.Set<MyEntity>().Any());
该函数接受一个具有DbContext
的单个参数的委托,并且可以返回任意值。 DbContext
的类型在函数调用的泛型参数中指定。如果你想.ToList()
结果,那么在lambda中做。代码(根据您的伪代码)要求DbContext
具有无参数构造函数。