gpt4 book ai didi

c# - 等待来自 Parse 的 query.FindAsync() 不起作用

转载 作者:行者123 更新时间:2023-11-30 20:46:05 24 4
gpt4 key购买 nike

我有一个来自 Parse.com 的在线数据库。有一个表“Vakantie”,包含 3 个对象,所以表数据不大。

我正在尝试从该表中获取所有对象,以便我可以通过 View 中的 VakantieController 显示它们。

Parse 有自己的文档,其中提供了示例代码。我复制了他们的示例代码并进行了编辑,使其适合我的网站。

代码:

Vakantie Controller :

public ActionResult Index()
{
var vakantiesTask = vakantieRepository.FindAll();
IEnumerable<Vakantie> vakanties = vakantiesTask.Result;
return View(vakanties);
}

VakantieRepository(包含用于检索和写入数据库的代码的类):

public async Task<IList<Vakantie>> FindAll()
{
var query = from v in ParseObject.GetQuery("Vakantie")
orderby v.Get<string>("titel") ascending
select v;

IEnumerable<ParseObject> objects = await query.FindAsync();
IList<Vakantie> vakanties = new Vakantie[] { };

foreach (ParseObject vakantieObject in objects)
{
Vakantie vakantie = GetVakantie(vakantieObject);
vakanties.Add(vakantie);
}

return vakanties;
}

方法 `GetVakantie(vakantieObject() 是我编写的一种方法,它将我从查询结果中获得的 ParseObject 转换为来 self 的域的 Vakantie 对象。

当我运行这段代码时,我得到了这一行:

IEnumerable<ParseObject> objects = await query.FindAsync();

当 Visual Studio 实际执行此命令时,我的网站只是不停地加载和加载。我从来没有越过这条线去下一条线。它就卡在那里。

有人对此有解决方案吗?

最佳答案

你遇到了一个经典的死锁场景,我 describe in full on my blogan MSDN article .总之,await将捕获当前的“上下文”并使用它来恢复 async方法。此外,ASP.NET 上下文一次只允许一个线程。因此,当请求线程被阻塞时(在 Task<T>.Result 上), await FindAll 内部无法恢复 async该上下文中的方法,最终会陷入僵局。

要更正它,请“一直”使用 async;即,不要使用 Task<T>.Result :

public async Task<ActionResult> Index()
{
var vakantiesTask = vakantieRepository.FindAll();
IEnumerable vakanties = await vakantiesTask;
return View(vakanties);
}

关于c# - 等待来自 Parse 的 query.FindAsync() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408452/

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