winforms 任务在完成前返回

fd3cxomn  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个桌面应用程序,我正在使用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
}

我怎样才能使它返回一个完整的任务?

ifmq2ha2

ifmq2ha21#

根据代码和注解,您应该await product.GetProduct(item)调用,加上我不知道创建一个任务(任务。运行并等待它)的需要,只是为了它,当您可能需要返回的产品同步。
你最好的选择是:

Product retProduct = await product.GetProduct(item);

if (retProduct != null)
{
    // Do your logic
}
else
{
    // Handle it
}

相关问题