gpt4 book ai didi

entity-framework - Entity Framework 取消长时间运行的查询

转载 作者:行者123 更新时间:2023-12-02 03:55:39 24 4
gpt4 key购买 nike

我是 TPL 的新手。我正在使用 TPL 对数据库进行一些异步调用。下面的 GetDocumentAsync 方法被多次调用,并且很好地卸载了不同线程上的任务以保持 UI 线程响应。

这里有两个目标:1) 保持 UI 线程响应 2) 让用户能够中止请求。

我已经设法中止了请求,但是我无法中止 Entity Framework 已经放入数据库并且查询正在数据库级别运行的请求......或者它甚至还没有开始。

因此 GetDocuments 方法仍然会返回有关已取消任务的文档。

有什么方法可以中止来自 EF 的请求吗?我可以在我的实现中做得更好吗?

    Entities _context = new Entities();

CancellationTokenSource _tokenSource = new CancellationTokenSource();

public async void GetDocumentsAsync(string userName)
{
IList<Document> results;
try
{
results = await
Task<List<Document>>.Factory.StartNew(() =>
{
_tokenSource.Token.ThrowIfCancellationRequested();
return GetDocuments(userName);
}, _tokenSource);

}
catch (OperationCanceledException ex)
{
Debug.WriteLine(string.Format("Task canceled for user {0} on thread", userName ));
}

if(!_tokenSource.IsCancellationRequested)
{
// results is used to update the UI
}
}

public void Abort()
{
_tokenSource.Cancel();
}

public List<Document> GetDocuments(string userName)
{
//I am using the connected model and need to use the Context for change tracking and other goodies..
var query = from c in _context.Documents
where c.CreatedBy == userName
select c;

query = query.Take(50); // I want to be able to cancel this query. Can this be done ???

return query.ToList();
}

最佳答案

异步支持是即将推出的 EF6 的一部分。

查看 KSA 的相关博文以了解概览。

http://odetocode.com/Blogs/scott/archive/2012/08/26/async-in-entity-framework-6-0.aspx

这样,您将切换到带有取消 token 的 ToListAsync。

http://entityframework.codeplex.com/SourceControl/changeset/view/fe17fe748307#src%2fEntityFramework%2fIQueryableExtensions.cs

关于entity-framework - Entity Framework 取消长时间运行的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com