我有一个桌面应用程序,我正在使用ADO .NET异步地执行一些SQL Server查询。有一个案例是,我正在创建一个对象,它需要大约5-6秒才能完成。现在,当我调用ADO .NET异步方法从数据库中获取数据时,问题就出现了。一旦它命中await
,则调用返回到主线程,而不完成其他任务,在一些任务之后,它返回等待,但调用已经返回到主线程,因此,我没有得到完整的数据。
这里是一个主要的调用者:
Task.Run<Product>(() => product.GetProduct(item))
.ContinueWith(task =>
{
if (task.IsFaulted)
{
throw;
}
else if (task.Result != null)
{
// here it coming without completing a complete Task
}
})
.ConfigureAwait(false);
GetProduct方法执行一些更类似的任务
public async Task<Product> GetProduct(ProductVariant item)
{
Product product = new Product();
product.Quantity = await GetQuantity(item.Id);
// some other properties
return product
}
代码在命中时返回到上述任务:
public async Task<List<Item>> Test()
{
// preparing query code
sqlDataReader = await sqlCommand.ExecuteReaderAsync();
// code logic after result returned
}
我怎样才能使它返回一个完整的任务?
1条答案
按热度按时间ifmq2ha21#
根据代码和注解,您应该
await product.GetProduct(item)
调用,加上我不知道创建一个任务(任务。运行并等待它)的需要,只是为了它,当您可能需要返回的产品同步。你最好的选择是: