【发布时间】:2018-07-20 20:13:34
【问题描述】:
是否可以在不使用 Task.Run() 产生新线程的情况下让某些东西在后台运行(例如数据库查询)?
数据库查询示例
public async Task Query(long objectToDelete)
{
using ( var ctx= new Context())
{
Car car = new Car { Id = objectToDelete};
ctx.Entry(employer).State = EntityState.Deleted;
await ctx.SaveChangesAsync();
}
}
据我了解,查询是同步运行的,直到第一个“等待”,然后控制权返回给调用者,
我想知道我是否可以留下这样的来电者:
public async Task Caller( long id)
{
var runningQuery = Query( id);
/* do something else
*/
// await runningQuery; // commented out so "Caller" can complete early
}
【问题讨论】:
-
请指定您喜欢的项目,如 Windows 窗体、Web api、控制台或任何其他
-
这是一个 ASP.NET 项目,所以查询在 GET 中
-
@UberFace - 当您在问题的“奇迹”部分尝试代码时发生了什么?
-
只要“做其他事情”不依赖于
runningQuery中的Task的结果,或者它可能做出的任何状态更改,这是完全可以接受的。
标签: c# multithreading entity-framework async-await