【问题标题】:I am using always the await keyword, but I get an error that says that the previous operation didn't complete我一直在使用 await 关键字,但我收到一条错误消息,指出上一个操作未完成
【发布时间】:2017-07-24 11:42:32
【问题描述】:

我有这个代码:

private async void reasignarPiezasReservadas(DbContext paramDbContext)
{
    try
    {
        string miStrTsql = "select...";
        await paramDbContext.MyType.SqlQuery(miStrTsql).ToListAsync();

        miStrTsql = "Select...";
        await paramDbContext.Database.ExecuteSqlCommandAsync(miStrTsql);
    }
}

使用此代码,我得到错误:{“在前一个异步操作完成之前,在此上下文上启动了第二个操作。使用“等待”确保在调用此上下文上的另一个方法之前已完成任何异步操作。任何实例成员不保证是线程安全的。"}

我在两个查询中都使用了 await。

如果在第一个查询中我使用 ToList() 而不是 ToListAsync(),那么我不会遇到问题。

但是,如果我在所有情况下都使用 await,为什么会出现错误?

谢谢。

【问题讨论】:

  • 带有awaits 的方法体是可以的。更有趣的是如何使用(调用)方法 - 可以注意到(1)方法是 async void 和(2)DbContext 是外部传递的。

标签: c# entity-framework-6 async-await


【解决方案1】:

尝试将方法定义从 async void 更改为 async Task。在方法调用上添加 await 也很重要。

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2020-08-08
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多