我的存储库中有一个使用Entity Framework插入数据的方法。我需要将此方法转换为异步方法。我怎么能这样做?
这是我的方法:
public void movetosecondpost(ProcessingPost processingPost)
{
SuccessPost movedQueue = new SuccessPost();
movedPost.Id = processingPost.Id;
Context.ProcessingPost.Remove(processingPost);
Context.SuccessPost.Add(movedPost);
}
在我的上下文中,我有这两种保存方法:
public override int SaveChanges()
{
return base.SaveChanges();
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
return base.SaveChangesAsync(cancellationToken);
}
答案 0 :(得分:2)
使此方法(movetosecondpost
)异步是没有意义的,因为它不涉及任何异步工作(例如IO)。如果包含保存对数据库的更改,则可以使其异步。
如果有一个方法调用此方法然后调用SaveChanges
,那么您可以使该方法异步。
答案 1 :(得分:2)
使用async
关键字
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken)
{
cancellationToken.ThrowIfCancellationRequested();
return await base.SaveChangesAsync(cancellationToken);
}
现在,您可以使用await
关键字将Task<int>
的结果展开到int
。这基本上是返回Task<int>
和int
之间的区别。任务只是一个承诺:我将执行一个返回int的操作,但我不确切知道何时。
在对数据库进行更改时,除了等待它完成之外,您的线程无法执行任何操作,因此通过执行此操作,您的线程将在发生这种情况时移回线程池。数据库操作完成后,将从线程池中获取另一个线程,并继续执行方法。