gpt4 book ai didi

c# - 无法等待任务

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:25 26 4
gpt4 key购买 nike

我无法弄清楚为什么以下代码不断抛出“无法等待”错误...

我有一种感觉,在实现异步 API 操作方面我可能走错了路。谁能指导我哪里出错了?

API 操作:

[HttpGet]
public async Task<IHttpActionResult> Get(int id)
{
var getAnimal = animalManager.Get(id);

var animal = await getAnimal;

return Ok(animal);
}

经理/服务方式:

public async Task<Animal> Get(int id)
{
return await Task.Run(() => { return animalRepository.Get(id); });
}

存储库方法(同步):

public Animal Get(int id)
{
var animal = dbSet.Find(id);

if (animal == null)
{
throw new ArgumentNullException("Animal");
}

return animal;
}

最佳答案

而不是使用 dbSet.Find , 使用 dbSet.FindAsync .请考虑以下事项:

repo

public Task<Animal> GetAsync(int id)
{
return dbSet.FindAsync(id);
}

服务

public Task<Animal> GetAsync(int id)
{
return animalRepository.GetAsync(id);;
}

API

然后您在 API 中的源代码将按您预期的那样工作。您可以通过等待调用而不是接受 Task<Animal> 来稍微简化它变量,并产生你的动物。

[HttpGet]
public async Task<IHttpActionResult> Get(int id)
{
var animal = await animalManager.GetAsync(id);

return Ok(animal);
}

此外,您的存储库和服务层代码可以轻松地只返回 Task。表示异步操作而不是等待它。利用现有的 API,特别是在 EF 中。这优于手动调用 Task.RunTask.Factory.StartNew .

关于c# - 无法等待任务 <MyObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38144198/

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