我想创建一个启动新任务的通用方法>创建我的数据库上下文的唯一实例(因为EF dbcontext不是线程安全的,并且我想并行执行很多任务)>通过ToList()
:ing枚举结果。
这是我的伪代码,显然不会编译。我需要您的帮助,将其完善为正确的语法:
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);
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());
该函数接受带有单个参数a的委托,DbContext
并可以返回任意值。DbContext
在函数调用的通用参数中指定的类型。如果要.ToList()
得到结果,请在lambda中执行该操作。该代码(按照您的伪代码)要求DbContext
具有无参数构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句